上一篇:多态性之上溯造型和下溯造型
抽象类(abstract)可以含有一个或多个抽象方法(只有方法的定义而没有方法的实现),也可以不含有抽象方法。如果想从一个抽象类继承,而且新类要实例化对象,则必须实现抽象类的所有抽象方法。否则,新类也是抽象类。
接口(interface)可以理解为纯抽象类。它完全禁止方法的实现。接口中的数据成员(字段)默认为static和final, 成员函数(方法)默认为public。所以在实现一个接口时,来自接口的方法必须也是public。
实现按一个接口要使用 implements(实现)关键字,其他操作和继承非常类似。
Java中的“多重继承”可以靠接口实现。因为Java中类只能单一继承而接口可以多继承。
如果一个新类同时要继承一个基础类和多个接口,基础类必须写在前面。
class Student extends People implements Eat, Sleep{
//...
}
接口扩展extends关键字:
interface Monster {
void menace();
}
interface DangerousMonster extends Monster {
void destroy();
}
使用接口的原因:
接口 or 抽象类?
若使用接口,我们可以同时获得抽象类以及接口的好处。所以假如想创建的基础类没有任何方法定义或者成员变量,那么就选择接口。事实上,如果事先知道某种东西会成为基础类,那么第 一个选择就是把它变成一个接口。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
接口的一个应用--常数分组:
因为接口的字段都默认为final和static,所以很适合常数分组。例如:
public interface Months {
int
JANUARY = 1, FEBRUARY = 2, MARCH = 3,
APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,
AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,
NOVEMBER = 11, DECEMBER = 12;
}
与C++的enum相似但不像enum那样拥有额外的类型安全性。不过比起直接将数字硬编码到程序中,这样实现起来的代码可读性更强。
下一篇:多态性之内部类和匿名类