接口
-
语法
[修饰符]interface 接口名 [extends 父接口名列表]{
[public][static][final]常量;//关键字默认有
[public][abstract]方法;//关键字默认有}
[修饰符]可选值.可选public或默认的default
[extends 父接口列表];可选;-
JDK1.8以前
- 接口里面只允许有公开静态的常量和公开抽象的方法
-
JDK1.8
-
还允许非抽象的静态方法和默认方法(default关键字修饰)
-
资料
Java 8 允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法(也称为默认方法或虚拟扩展方法或防护方法)。在实现该接口时,该默认扩展方法在子类上可以直接使用,它的使用方式类似于抽象类中非抽象成员方法。
扩展方法不能够重写(也称复写或覆盖) Object 中的方法,却可以重载Object 中的方法。
如:toString、equals、 hashCode 不能在接口中被覆盖,却可以被重载。默认方法允许我们在接口里添加新的方法,而不会破坏实现这个接口的已有类的兼容性,也就是说不会强迫实现接口的类实现默认方法。
默认方法和抽象方法的区别是抽象方法必须要被实现,默认方法不是。作为替代方式,接口可以提供一个默认的方法实现,所有这个接口的实现类都会通过继承得到这个方法(如果有需要也可以重写这个方法)
静态方法,通过static关键字修饰的方法;和普通类的静态方法调用方式一致
-
-
-
-
定义
接口是一种特殊的抽象类
使用interface关键字定义接口
没有构造方法,不能创建对象
只能定义:公开静态常量,公开抽象方法
具体代码:
public interface C extends interfaceA,interface B{int app=3; void say();
}
-
规范
任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类
实现接口的抽象方法时,访问修饰符必须为public -
常量接口与枚举
-
常量接口
将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统一管理,提高代码可读性.
-
枚举
enum Day {
MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
-
-
接口的思想指导
-
接口是一种能力
接口方法代表了生活中的一种能力体现,
如果说普通类等代表着万物,抽象类代表着抽象的事物,那么能力也是抽象的,代表着着各类中相近方法能力的集合与规范 -
接口引用与多态
同父类引用一样,多态的应用也跟父类的一样
可强转回实现类本身类型- 接口多态图
-
-
接口与抽象类
-
相同点
不能创建对象,能被其它类实现和继承
都包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法
可编译成字节码文件
可以作为引用类型
具备Object类中所定义的方法- 不能实例化
-
不同点(重点)
所有属性都是公开静态常量,隐式使用public static final修饰
所有方法都是公开抽象方法,隐式使用public abstract修饰
没有构造方法,动态代码块,静态代码块具体差别:
接口中只能包含抽象方法,不能包含普通方法,抽象类可以包含普通方法
接口中不能定义静态方法;抽象类可以定义静态方法
接口中只能定义静态常量属性,不能定义普通属性,抽象类里可以定义静态常量属性,也可以定义普通属性
接口不能包含构造器;抽象类可以包含构造器,抽象类的构造器是为了让其子类调用并完成初始化操作
接口不能包含初始化块,但抽象类可以包含初始化块
一个类最多只能有一个直接父类,包含抽象类,但是一个类可以实现多个接口
-
XMind: ZEN - Trial Version