仅能继承单个父类;可以实现多个接口。这是Java实现其多态性的重要手段,也涵盖了接口、抽象类和类之间的关系
基本特性
1.接口
接口的属性有字段和方法组成,没有构造函数的原因:接口是用来被子类继承实现多态性的,是不能被实例化的
1. 属性:仅能被public、static、final修饰,不能被private、protected、volatle、transient、strictfp和synchronized修饰
2. 在方法的定义上JDK1.7和JDK1.8有了很大的区别
- JDK1.7:接口中的方法必须全部为抽象方法,此时的接口可以看成特殊的抽象类
接口中抽象方法的定义:
//和抽象类中抽象方法允许public和protected修饰不同,接口中的抽象方法仅允许public修饰
//protected对于子女、朋友来说,就是public的,可以*使用,没有任何限制,而对于其他的外部
//class,protected就变成private,不符合接口开放设计原则
public abstract void method();
- JDK1.8:相比较与JDK1.7有了两点最大的改变(全部基于可以定义代码实现的方法)
可以定义多个静态非抽象的方法
//修饰符同样只需要public
public static void method(){
//do something
}
可以定义多个默认方法
//必须default关键字进行修饰
public default void method(){
//do something
}
Tip:JDK1.8,接口的方法必须全部是public修饰的,static、abstract、default修饰专门的方法,不能混合使用
2.类
类的属性由字段、方法、构造函数、代码块和静态代码块组成
1. 字段
public static final String field = "this is field property";
2. 方法
public void method(){
//do something
}
3. 构造函数
public Constructor(){
//do something
}
4.代码块,定义在类内部,方法外;实例被创建的时候,代码被执行
{
//do something
}
5.静态代码块,定义在类内部,方法外;类被加载的时候,代码被执行
static{
//do something
}
3.抽象类
抽象类的属性主要由字段、方法、构造函数、代码块和静态代码块组成。
抽象类的属性大致和类的定义规则是一样的,除了方法,抽象类的方法允许定义抽象方法(没有代码实现的方法)
//abstract关键字是定义抽象类和定义抽象方法的标识
//抽象方法只允许用可见的修饰符public和protected修饰
public abstract void method();
关系
1.接口和类
- 类可实现多个接口
2.接口和抽象类
- 抽象类也可使实现多个接口
- 抽象类最大的好处就是可以实现多个接口,但不必实现全部的接口方法,在做模块化设计的时候很有用
3.抽象类和类
- 类只能继承一个抽象类,类只能继承一个抽象类
- 比较特殊的是超类Object,Java中所有的类都继承与此类,我们可以重写(@Override)Object的方法
4.接口和接口
- 接口可以继承多个接口,用逗号隔开,接口实现类必须实现所有接口的方法
- 从另外一个角度解决了类的单继承的问题
Tip:各个阶段的理解可能不一样,后续会更改和补充