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的实现类。
public interface Person {
void eat();
void work();
default void sleep(){
System.out.println("晚上睡觉");
System.out.println("晚上也可以不睡觉");
}
}
默认方法修改以后
可以看出只要修改接口中的默认方法,所有的实例使用该方法,方法体都会改变。
默认方法优点
优点在于容易对程序进行优化,并且增加了程序的可拓展性。
接口静态方法
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;
}
静态不能访问非静态
静态方法和静态代码块中,不能使用非静态的方法和属性。
内部类注意事项
内部类的成员变量和外部类的成员变量重名情况下。内部类调用外部类的成员变量,用外部类名.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();
}
}
数组的创建于初始化注意点
int a [] = new int[5];
[]可以在数组名称之后,但是不常用,这种写法也对。
boolean注意点
为此字段选择适当的数据类型:isSwimmer,选择boolean
is 开头的命名方式一般用于布尔值判断。
参数注意点
所有参数传递,传递的都是副本。