Cli*_*ote 17 java oop abstract-class
何时以及为什么要使用抽象类?我想看看它们用途的一些实际例子.另外,抽象类和接口有什么区别?
抽象类是类的"半实现".可以使用某些通用功能部分实现它们,但将部分实现留给继承类.你可以有一个叫做抽象类Animal已经实现了一些通用的行为/值,例如Age,Name,SetAge(...).您也可以使用未实现的方法(它们abstract),就像接口一样.
接口只是指定应该可用于类的行为的契约.您可以拥有一个接口,例如IWalker需要公共方法Walk(),但没有具体说明如何实现.
完全抽象的类(所有方法都是抽象的)(几乎)与接口相同(主要区别在于它们可以包含字段和非公共抽象方法,哪些接口不能).区别在于您有一个抽象类,其中包含一个方法,该方法具有一些对所有派生子项都相同的常用功能.
例如,如果要对文件系统建模,您就会知道,无论对象类型如何,您都将拥有项目的路径.你想要有一个共同的实现来获得这条路径(一遍又一遍地写同样的东西没有意义),并为孩子们留下一些特别的实现.
抽象类与接口
与接口不同,抽象类可以包含非静态的字段
final,并且它们可以包含已实现的方法.这些抽象类与接口类似,不同之处在于它们提供部分实现,将其留给子类来完成实现.如果抽象类只包含抽象方法声明,则应将其声明为接口.多个接口可以由类层次结构中的任何位置的类实现,无论它们是否以任何方式彼此相关.想想
Comparable或者Cloneable,例如.相比之下,抽象类最常被子类化以共享实现部分.单个抽象类由具有许多共同点(抽象类的实现部分)的类似类子类化,但也有一些差异(抽象方法).
抽象类示例
在面向对象的绘图应用程序中,您可以绘制圆形,矩形,线条,贝塞尔曲线和许多其他图形对象.这些对象都具有某些状态(例如:位置,方向,线条颜色,填充颜色)和行为(例如:moveTo,rotate,resize,draw).所有图形对象中的一些状态和行为都是相同的 - 例如:position,fill color和moveTo.其他需要不同的实现 - 例如,调整大小或绘制.所有人都
GraphicObjects必须知道如何绘制或调整自己的大小; 他们只是在做不同的事情上有所不同.这是抽象超类的完美情况.您可以利用相似性并声明所有图形对象从同一个抽象父对象继承 - 例如,GraphicObject如下图所示.类Rectangle,Line,Bezier和Circle继承自GraphicObject
[...]
来源:Java™教程
| 归档时间: |
|
| 查看次数: |
28296 次 |
| 最近记录: |