java面向对象篇补充

  • 接口新特性
  • 常量的定义
  • 抽象方法
  • 接口默认方法
  • 默认方法优点
  • 接口静态方法
  • 接口静态方法注意点
  • 接口私有方法
  • 接口注意事项
  • final关键字注意点
  • 静态不能访问非静态
  • 内部类注意事项
  • 数组的创建于初始化注意点
  • boolean注意点
  • 参数注意点


接口新特性

接口是多个类的公共规范,其中最重要的就是抽象方法。interface修饰的就是接口。随着java版本的不断更新,接口的内容也在不断的变化。
在java7时,接口的内容有常量和抽象方法。
java8,接口添加了默认方法和静态方法。
java9,接口添加了私有方法。

常量的定义

public static final  数据类型 常量名 = 数值;

常量名必须大写,public static final 可以省略。
final省略后依然是常量,必须赋值,不可改变,常量名全部大写,用下划线隔开单词。

抽象方法

public abstract  返回值类型  方法名(参数列表);

public abstract 关键词可以省略。
抽象方法没有方法体。并且实现类必须重写接口所有的方法,但是如果是实现是抽象类,那么可以不重写接口所有的方法。

接口默认方法

java8中,接口添加了默认方法

public default 返回值类型 方法名 (参数列表){
}

public 可以省略,default不能省略,默认方法是所有对象共有的方法,默认方法中方法体改变,所有实现类的对象使用该方法都会变,并且需要通过实现类的实例对象来使用,可以被实现类重写。要区别于接口的静态方法。

public interface Person {
        void eat();
        void work();
        default void sleep(){
            System.out.println("晚上睡觉");
          
        }

}
public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.sleep();
        Teacher tea = new Teacher();
        tea.sleep();
    }

}

Student和Teacher是Person的实现类。

Java什么可以省略 java方法省略public_静态方法

public interface Person {
        void eat();
        void work();
        default void sleep(){
            System.out.println("晚上睡觉");
            System.out.println("晚上也可以不睡觉");
        }

}

默认方法修改以后

Java什么可以省略 java方法省略public_Java什么可以省略_02


可以看出只要修改接口中的默认方法,所有的实例使用该方法,方法体都会改变。

默认方法优点

优点在于容易对程序进行优化,并且增加了程序的可拓展性。

接口静态方法

java8中,接口可以添加静态方法

public static 返回值类型 方法名(参数列表){
}

public 可以省略。
特点是方法属于接口,可以通过接口名称使用,并且实现类无法重写该方法。

接口静态方法注意点

不能通过实现类对象使用,只能通过接口名称使用。

接口私有方法

java9开始,接口允许定义私有方法

private 返回值类型 方法名(参数列表){
}
static 返回值类型 方法名(参数列表){
}

私有方法主要是为了提取静态方法和默认方法的重复代码,提高代码复用性。

接口注意事项

1.接口没有静态代码块和构造方法。
2.一个类可以实现多接口。
3.如果实现类实现的多个接口中,多个接口中有重复的默认方法,那么实现类一定要重写那么重复的默认方法。
4.一个类直接父类中的方法和接口的默认方法冲突,优先使用父类中的方法。
5.除了抽象类外,所有实现类必须实现接口中所有的抽象方法。

final关键字注意点

final修饰成员变量,可以通过直接赋值和在构造方法中赋值两种方法。
但是如果要在构造方法中赋值,必须保证所有的构造方法都对final成员变量赋值。

public class Teacher
 final int age ;
    String name;
    Teacher(){
         age = 20;
    }
    Teacher(int age){
        this.age = age;
    }

静态不能访问非静态

静态方法和静态代码块中,不能使用非静态的方法和属性。

Java什么可以省略 java方法省略public_静态方法_03

内部类注意事项

内部类的成员变量和外部类的成员变量重名情况下。内部类调用外部类的成员变量,用外部类名.this.成员变量名。

public class haha {
    int a = 10;
    class hehe{
      int a = 20;
      void he(){
          System.out.println(haha.this.a);
      }

    }
}
public class Test {
    public static void main(String[] args) {
       haha.hehe h = new haha().new hehe();
       h.he();
    }

}

Java什么可以省略 java方法省略public_Java什么可以省略_04

数组的创建于初始化注意点

int a [] = new int[5];

[]可以在数组名称之后,但是不常用,这种写法也对。

boolean注意点

为此字段选择适当的数据类型:isSwimmer,选择boolean
is 开头的命名方式一般用于布尔值判断。

参数注意点

所有参数传递,传递的都是副本。