接口相关概述:
接口是一种特殊的抽象类,所以类的特征也同样适用于接口。Java是单继承语言,但是有接口就可以多继承,解决了继承多个抽象类的问题。如果把接口视为抽象类,则Java实现了多继承。
注:接口不是用来多继承的,它更多的目的是定制一个标准,实现解耦。
1.在接口中成员变量其实是常量 ,可以省略public static final , 注意 ; 不写也照样是也可以的
注:
(1).常量必须进行赋值,而且一旦赋值不能改变。
(2),常量名称完全大写,用下划线进行分隔。
(3).接口中最常用的就是抽象方法。
2.接口当中的抽象方法 , 修饰符必须是两个固定的关键字 public abstract
返回值类型 方法名称(参数列表) { 方法体 }
实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。
3.接口不可以直接使用 , 必须有一个实现类来实现该接口。
从Java 8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型 方法名称(参数列表) { 方法体 }
注意:这个默认方法实现类不用进行重写也可以使用,默认方法也可以被覆盖重写
4.接口中包含的方法:
java7 包含 : 1.常量 2. 抽象方法
java8 包含 : 3.默认方法 4.静态方法
java9 包含 : 5.私有方法
从Java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型 方法名称(参数列表) { 方法体 }
注:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法
从Java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 }
静态私有方法:private static 返回值类型 方法名称(参数列表) { 方法体 }
注:private的方法只有接口自己才能调用,不能被实现类或别人使用,用来解决多个默认方法之间重复代码问题。
接口中也可以定义成员变量 , 但是必须使用public static final 三个关键字进行修饰 , 从效果上看 ,其实就是常量
关于在接口中成员变量默认为常量的原因
static(这时暂且认为是变量)解释:因为一个类可以实现多个接口,如果一个类同时实现了多个接口而每个接口中都定义了同一个变量的话就会产生在类中不知道是哪个接口中的变量了,所以必须定义成static的,每个接口拥有各自的这个变量。
final解释:因为一个接口可以被多个类实现,如果不定义成final的话每个实现了该接口的类都去改变这个变量就会产生错误,所以必须定义成final。
关于抽象类中可以定义变量的原因:
因为每个类只能有一个父类,就不会产生上述的接口中的一些问题。