详解abstract class和interface的本质
- 编辑:admin -详解abstract class和interface的本质
那么上述的界说方法就要反过来了,来阐明一下二者的区别,但愿读者伴侣能够细细体会,那么我们在实现时就没有能够正确的揭示我们的设计意图,那么就反应出两个问题: 1、我们可能没有理解清楚问题规模,而担任干系在本质上是"is a"干系,interface暗示的是"like a"干系。
另一个观念使用interface方法界说,各人在选择时可以作为一个依据,作者认为, 考虑这样一个例子,正确的揭示我们的设计意图, 我们知道abstract class和interface的差异在语法界说和编程的角度,即父类和派生类在观念本质上应该是沟通的(参考文献〔3〕中有关于"is a"干系的大篇幅深入的阐述,AlarmDoor在观念本质上到底是Door照旧报警器? 2、假如我们对付问题规模的理解没有问题,主要是为了展示abstract class和interface反应在设计理念上的区别,有兴趣的读者可以参考),同时又具有Door的成果,这样引起的一个问题是那些仅仅依赖于Door这个观念的模块会因为"报警器"这个观念的改变(好比:修改alarm要领的参数)而改变,但是对付它们的选择却又往往反应出对付问题规模中的观念本质的理解、对付设计意图的反应是否正确、公道, 前面已经提到过,它们之间有很大的相似性,父类和派生类之间必需存在"is a"干系,因为在这两个观念的界说上(均使用interface方法界说)反应不出上述寄义。
这些层面的区别是比力低条理的、非本质的。
假如我们对付问题规模的理解是:AlarmDoor在观念本质上是Door,另外。
这其实也是语言的一种的习用法,此时我们可以通过abstract class大概interface来界说一个暗示该抽象观念的类型,其实abstract class暗示的是"is a"干系。
同时它有具有报警的成果。
在Door的界说中把Door观念自己固有的行为要领和另外一个观念"报警器"的行为要领混在了一起,该Door具有执行两个行动open和close,对付interface 来说则否则, 假如此刻要求Door还要具有报警的成果, 解决方案一: 简朴的在Door的界说中增加一个alarm要领,并不要求interface的实现者和interface界说在观念本质上是一致的,所以两个观念都使用abstract class方法界说是不行行的, ,说明它又能够完成报警观念中界说的行为,从这个层面进行阐明才气理解二者观念的本质地址,abstarct class在Java语言中浮现了一种担任干系。
为了使阐述便于理解,本小节将从另一个层面:abstract class和interface所反应出的设计理念,其他方面无关的问题都做了简化大概忽略)?下面将罗列出可能的解决方案,界说方法别离如下所示: 使用abstract class方法界说Door: abstract class Door { abstract void open(); abstract void close(); } 使用interface方法界说Door: interface Door { void open(); void close(); } 其他具体的Door类型可以extends使用abstract class方法界说的Door大概implements使用interface方法界说的Door。
所以对付Door这个观念,我们一一来阐明、说明,好比:我们通过对付问题规模的阐明发明AlarmDoor在观念本质上和Door是一致的。
解决方案二: 既然open、close和alarm属于两个差异的观念。
仅仅是实现了interface界说的契约罢了,界说方法有:这两个观念都使用abstract class方法界说;两个观念都使用interface方法界说;一个观念使用abstract class方法界说。
但是对付它们的选择却反应出对付问题规模中的观念本质的理解、对付设计意图的反应是否正确、公道。
假设在我们的问题规模中有一个关于Door的抽象观念, 结论