9.1 抽象类和抽象方法
包含抽象方法的类叫做抽象类。
如果在子类中不重写抽象类的抽象性方法,则该子类也为抽象类。
抽象类可以阻止对象的产生,使类的用途更为明确。
9.2 接口
接口中的成员变量默认为static和final,必须赋初值。
接口中的方法默认为public,且只能为public和abstract。
interface IDemo {
//The blank final field i may not have been initialized
int i;
//Illegal modifier for the interface method f; only public & abstract are permitted
private void f();
}
9.3 完全解耦
通过接口可以实现在一个新类中使用不存在在该类的继承结构中的类的方法。(赋予类以功能而不使用继承)。
对于方法设计也更为灵活,如果一个方法要求传入具有某个功能的类对象,若不使用接口则只能传入该类及其子类对象;通过接口,可以将实现了该接口的对象向上转型为接口类型,从而实现了参数的传入。
9.5 通过继承来扩展接口
避免在不同接口中使用同样的方法名。
interface IDemo1 {
void f();
}
interface IDemo2 {
int f();
}
class C implements IDemo1, IDemo2{
@Override
public void f() {
}
@Override
public int f() {
}
}
类C必须实现IDemo1,IDemo2中的方法,而只有返回值的重载是不允许的,故报错。
适配器模式
对于发现(导入)的类,可以建立该类的适配器类并实现相关接口,可以实现具有原有类的对象也具有接口性质。
从而实现了对发现类的修改,可以定制符合需求并且实现接口的类。
工厂模式
将接口与实现分离,建立工厂类,在工厂类内部实现接口并返回实现了接口的对象。
这样可以实现接口实现的透明,可以随时修改接口的实现方式和返回对象。