1. Java抽象类
在java中,带有abstract关键字的类被视为抽象类。它可以拥有抽象方法和非抽象方法(带有方法体)
Java中的抽象
抽象是仅仅向用户展示功能而隐藏实现细节的过程。另一种方式是,它只向用户展示基本信息并隐藏内部细节,例如发送短信,用户只需要编辑短信内容而无需知道短信是怎么被发送出去的
抽象让你专注于对象能够做的事情,而不是它如何完成的
实现抽象的方式
在java中有两种方式实现抽象:
- 抽象类(0%-100%)
- 接口(100%)
抽象类
- 抽象类拥有抽象方法和非抽象方法
- 需要被继承并且实现它的抽象方法,它不能被实例化
- 它可以有构造方法和静态方法
- 它可以有final方法但是子类不能重写这个方法
2. java接口
在java中,接口是类的蓝图,它拥有静态常量和抽象方法。java接口是一种实现抽象的机制,他们只能包含抽象方法,不能有方法体,接口被用来达到抽象和多继承的目的。
java接口也代表了以一种is-a的关系。
我们不能实例化一个接口,就像抽象类那样
在java8中,我们可以使用default方法和static方法;在java9中,我们可以使用private方法
为什么使用接口?
使用接口主要有三个原因:
- 接口可以达到抽象的目的
- 通过接口,我们能支持多继承的功能
- 它可以用来实现松耦合
编辑器的附加限制:
The Java compiler adds public and abstract keywords before the interface method. Moreover, it adds public, static and final keywords before data members.
java编辑器在接口的方法前面增加了public和abstract关键字,在数据成员前增加了static和final关键字
类与接口的关系
- 类可以继承类
- 接口可以继承接口
- 类可以实现接口
什么是maker或者tagged interface?
一个没有成员的接口被视为maker或者tagged interface,例如:Serializable, Cloneable, Remote等,他们被用来提供一些有用的信息给JVM,以便JVM执行一些有用的操作
嵌套接口
在另一个接口或类中声明的接口称为嵌套接口。嵌套接口用于对相关接口进行分组,以便它们易于维护。嵌套接口必须由外部接口或类引用,它不能被直接访问
3. 抽象类和接口的区别
- 最主要的区别:抽象类并非100%的抽象;接口是100%的抽象
- 抽象类不能实现多继承,接口可以实现多继承