抽象层次从高到底:接口->抽象类->具体实现类
1.接口中定义了一些方法,但是没有实现。
2.在接口的具体实现类中,如果有共同的实现<部分>,可用一个抽象类来实现这些共同的部分;个性化的实现交给具体实现类<子类>完成。
3.<抽象类提供了公共方法的实现>
使用场景:
包含抽象方法的类即为抽象类,当一个抽象类中所有的方法都是抽象时,我们就可以定义成接口。
在设计类时,如果有些方法我们能确定,而有些方法不能确定,这时候我们就可以把该类声明成抽象类。抽象类的应用场景非常多,例如模板方法模式就是抽象类的一个应用,JDK中的inputStream和outputStream也是抽象类的一个应用,这两个类定义了如何读写数据的方法,而没有定义从哪里去读,具体从哪里读由具体的实现子类确定。
我们在定义相互调用规则时,可以使用接口。面向接口进行编程的明显好处,就是能极大降低软件系统的相互耦合性,接口的定义者按照接口进行调用,而实现者去实现接口。
在JDK中存在许多针对于接口的编程,例如用于比较对象的Comparable接口就是一个典型案例,我们在自定义对象时,如果实现了该接口,那么我们把对象保存到treeset集合中时,treeset将针对接口调用对象的compareTo方法。