Java中的抽象
抽象是隐藏实现细节并仅向用户显示功能的过程,它只向用户显示基本内容并隐藏内部细节;
抽象的作用:
- 1.你可以专注于对象的
作用
而不是对象的实现
。 - 2.抽象方法(协议)一旦建立不会随意更改,使结构更稳定,子类或实现类只是在此协议上进行拓展
抽象在java中的实现:
- 1.接口 --> 抽象比例 100%
- 2.抽象类 --> 抽象比例 0%到100%
1.Interface
接口的作用:
- 1.它用于定义抽象行为。
- 2.通过接口可以实现多重继承。
- 3.它可用于实现松耦合。
从Java 8开始,可以在接口中使用默认和静态方法。
从Java 9开始,可以在接口中使用私有方法。
2.Abstract Class
抽象类的作用:
- 1.抽象类常用来继承,具体类不是用来继承的。
- 2.抽象类应当拥有尽可能多的共同代码。
- 3.抽象类应当拥有尽可能少的数据。
3.差异
抽象类与接口类似。您无法实例化它们,并且它们可能包含使用或不使用实现声明的混合方法。
但是,对于抽象类,您可以声明非静态和最终的字段,并定义public,protected和private具体方法。
使用接口,所有字段都自动为public,static和final,并且您声明或定义的所有方法(作为默认方法)都是公共的。
此外,您只能扩展一个类,无论它是否是抽象的,而您可以实现任意数量的接口。
你应该使用哪些,抽象类或接口?
如果任何这些语句适用于您的情况,请考虑使用抽象类:
希望在几个密切相关的类之间共享代码。
希望扩展抽象类的类具有许多常用方法或字段,或者需要除公共之外的访问修饰符(例如protected和private)。
想声明非静态或非最终字段。这使您可以定义可以访问和修改它们所属对象的状态的方法。
如果任何这些语句适用于您的情况,请考虑使用接口:
希望不相关的类可以实现您的接口。例如,接口 Comparable以及 Cloneable被许多不相关的类来实现。
希望指定特定数据类型的行为,但不关心谁实现其行为。
希望利用类型的多重继承。
4.应用
在设计模式中的应用:
- 1.模板模式 – 抽象类
- 2.工厂模式 – 接口
- 3.代理模式 – 接口
- 4.适配器模式(将两个不想干的接口成一个) – 接口+抽象类
5.总结
总结:
抽象类表示一个模板,接口表示一个契约。
模板填写之后才会有意义,契约需要遵守。
抽象类和接口类的实例化,通过多态性(向上转型,向下转型),所调用的全部方法,都是被覆写过的方法。
开发中,一个类永远不要去继承一个已经实现好的类,要么继承抽象类,要么实现接口,如果两个类同时都可以使用的话,优先使用接口,避免单继承的局限。
参考:
[ 1 ].https://www.javatpoint.com/difference-between-abstract-class-and-interface
[ 2 ].https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html