(一)知识层面
1、抽象类
(1)定义:
用abstract修饰的类,表示一种抽象的类型。
为什么Java中要有这种抽象的类型呢?
举个例子,当你要写一个动物类时,所有动物的年龄等属性的定义方式是确定的,但是“吃”“叫”之类行为的实现方式是不相同的。这时可以将这些行为(方法)定性为抽象,子类继承抽象类之后,再去具体实现这些抽象方法。
说明:一个类中只要存在抽象方法,那么这个类一定是抽象类。
(2)规范:
1、抽象类中既可以有抽象方法,也可以有非抽象方法。
抽象方法:只知道要做一件事情,但是不知道具体怎么做。没有方法体。例如:
public abstract void eat();//动物吃的方法
2、继承抽象类,就要实现抽象类中所有的抽象方法。
3、抽象类不能直接创建对象,必须通过子类创建对象。
2、接口
(1)定义:
接口就是一种公共的规范标准,只要符合规范标准,大家就可以通用。有着扩展功能的作用。
(2)规范:
1、接口中没有变量,只有常量,默认被public static final修饰。方法的默认修饰符为public abstract,java1.8后default修饰的方法,可以定义方法体,例如:
default void sleep() {
}
2、实现接口就必须要实现父接口中的所有抽象方法。
3、接口不能直接new出对象,必须要通过实现类去创建。
4、接口的实现可以多态,与类的继承类似。
5、接口不能实现接口。
6、一个类中可以实现多个接口,中间用“,”隔开。
7、接口可以继承接口,而且可以继承多个接口,中间用“,”隔开。
3、抽象类与接口的区分
抽象类 | 接口 |
---|---|
子类继承(extends)父类 | 实现类实现(implements)父接口 |
本质是类,class修饰 | 本质是接口,Interface修饰 |
什么时候定义抽象类,什么时候定义接口,一定要回想定义和规范。
(二)使用层面
接口:
Java里的接口像是1个功能包或插件,Java的类实现1个接口就相当于装备上这个功能包或插件,从而具有了这个功能包和插件对应的功能。
参考作用:
-
通过接口可以实验不相关类的相同行为。
例如 java规定所有可以完成自我复制功能的类都必需实现java.lang.Colneable 接口。
而这个接口是空的,没有任何内容,只是起1个标记作用。 -
接口提供了不同对象进行协作的平台。(?)
例如事件处理。 -
接口可以实现多继承, 一定程度上弥补了java类只能单继承的缺点。
-
接口是我们了解1个类的功能的重要途径
例如1个类的定义代码很复杂,而我们可以观察它实现了哪些接口,大概估出这个类的作用。