java编程思想第九章接口
9.1抽象类和抽象方法
为什么要有抽象类?
是希望通过通用接口操作一系列类。
那么抽象类的形式是什么样的呢?
声明类的使用使用abstract关键字,且在该类中应该具有抽象方法。
注:抽象方法被关键字abstract方法修饰。
编译器会禁止我们对抽象类进行实例化。
9.2接口
接口是对抽象类更进一步的抽象。
接口声明时使用interface关键字,接口中的域都是隐式添加关键字:public static与final。
接口想被导出类实现需要通过关键字implement来完成。
接口中的方法是被默认定义为public abstract的。
9.3完全解耦
使用策略模式,适配器模式,代理模式完成完全解耦。
9.4多重继承
接口与接口之间是可以通过多重继承来提升接口的功能的。
9.5通过继承来扩展接口
在使用继承扩展接口时,请避免将不同接口中的名字定义为一样的。这样会导致编译异常。
9.6适配接口
通过适配器模式将类与接口进行适配。
9.7接口中的域
接口中的域默认都是public static final的。
9.8嵌套接口
在实现接口时,并不需要实现嵌套在其内部的任何接口
9.9接口与工厂
通过工厂模式来创建接口的实现对象。
提供一些复用的机制。
总结:
实际上工作中,接口是否存在滥用的情况吗(指service与dao层的接口)?
目前来说还是看不到的,或许自己对框架的理解不够深刻?
但是通过接口来提供模板是一种很好的实现方式。也是一种很好的编程思路。
除此之外,在项目中间接口的使用还是相对较少的。
还是需要累积更多经验,要多思考啊!
抽象类与普通类的区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类无法实现该方法,)缺省情况下默认为public。
2)抽象类不能够用来创建对象。
3)如果一个类继承抽象类,则必须实现父类的抽象方法;否则的话,子类也必须定义为abstract类。
接口:
1)接口中的变量会隐式地指定为public static final变量。
2)非抽象类实现接口必须重写接口中的方法;若是抽象类,可以不实现该接口中的抽象方法。
抽象类与接口的区别:
1)语法层面的区别:
a)抽象类可以提供成员方法的实现,而接口中只能存在public abstract方法。
b)抽象类中的成员变量是可以是各种类型的,而接口中的成员变量只能是public static final类型的。(这里使用成员变量这个词,实际上应该使用类变量,因为这里用到了static这个关键字)。
c)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块与静态方法。
d)一个类只能继承一个抽象类,而一个类可以实现多个接口。
2)设计层面来说:
抽象类是对事物的一种抽象,即对类的抽象。接口是一种行为的抽象。
继承抽象类,对子类来说,是一种“是不是”的关系。(即是不是某一种类事物,鸟类为抽象基类的话,乌鸦是鸟类,鸽子也是鸟类)。
实现接口,对于子类来说,是一种“能不能”的关系。(飞行是一个接口,飞机和乌鸦都实现这个接口,实现飞翔的能力)。
本文参考:java编程思想中文版第四版。