

在Java面向对象的编程中,始终使用接口和抽象类. 它们都是事物的抽象. 它们有一些共同点,但也有许多差异.
接口
在Java中,需要使用interface关键字定义接口. 它是对行为和合同协议的抽象. 仅定义行为不会实现特定行为(Java 1.8中的默认方法).
在Java中定义接口:

公共接口InterfaceName {
public void doSomething();
}
接口中的行为必须是公共的,并且如果定义了成员变量,则它也必须是静态的final. 接口中定义的行为是抽象的,也可以理解为特殊的抽象.
抽象类
在面向对象的编程中,对象是按类描述的. 如果一个类没有足够的信息来描述特定的对象,则该类就是抽象类.

需要使用abstract关键字定义一个抽象类,表明一个类是一个抽象类. 抽象类是事物类共有的抽象,它实现一种共同的行为,并构造一组固定的行为抽象描述,但是这组行为可以具有许多可能的具体实现.
在抽象类中抽象类实现接口,抽象是抽象类. 通常,有抽象方法. 如果您定义一个没有抽象方法的抽象类,则在语法级别上是可行的,但在实践中很少使用.
Java中抽象类的定义:

抽象类
从语法定义的角度来看抽象类和接口

在抽象类方法中,您可以拥有自己的数据成员或非绝对成员方法. 在实现接口方法时,只能有无法修改的静态数据成员. 所有成员方法都是抽象和公共的.
具体区别如下:
抽象类可以提供成员方法的实现细节,并且接口中只能存在公共抽象方法(Java 1.8中的默认方法);抽象类中的成员变量可以是私有的,受保护的和公共的,而接口变量中的成员只能是公共的静态最终类型;接口不能包含静态方法和代码块,抽象类可以具有静态代码块和静态方法;一个类只能继承一个抽象类,但是一个类可以实现多个接口. 如果一个类实现某些接口的方法,则该类也需要定义为抽象类. 从设计中区分抽象类和接口
abstarct类反映Java语言中的继承关系. 为了使继承关系合理,父类和派生类之间必须存在“是”关系,也就是说,父类和派生类的概念应基本相同. 接口不是这种情况. 不需要接口的实现者和接口的定义在概念上本质上相同,只需实现接口定义的协定即可.
可以理解,抽象类是事物类的抽象,而接口是行为的抽象.
下面引用了一个非常经典的示例. 伟大的神灵已经对其进行了分析. 让我们来看看.

假设在我们的问题域中有一个关于门的抽象概念. 门有两个动作来执行打开和关闭. 此时,我们可以通过抽象类或接口定义抽象概念类型或定义方法. 它们如下:

抽象类和接口
其他特定的门类型可以扩展由抽象类定义的门或实现由接口定义的门. 看来使用抽象类和接口之间并没有太大区别.
如果现在需要Door具有报警功能. 我们应该如何设计类结构?
每个人都可以轻松地想到在Door中添加一个抽象方法Alarm(). 此方法首先违反了面向对象设计中的单个原则. 在“门”的定义中,“门”概念本身固有的行为方法与另一个概念“警报”的行为方法混合在一起. 如果一扇门根本没有报警功能,则必须对其进行相应的修改.
另一种是添加一个单独的警报界面. 由于Java语言不支持多重继承,因此应将警报设计为接口. 抽象类表示Java语言中的继承关系,并且该继承关系实质上是“是”关系. 将Door设计为抽象类更为合适. 报警只是一种行为. 还应该将其设计为设计的接口.
因此,对于门的概念,我们应该使用abstarct类进行定义. 另外,AlarmDoor具有警报功能抽象类实现接口,表示它可以完成警报概念中定义的行为,因此可以通过界面定义警报概念. 看起来像这样:

最终课程结构
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-177974-1.html
最好还是滚出地球吧
无论是民间还是当官的都滋长了一种戾气
欢迎美国军舰莅临检查南海岛礁建设情况