java中抽象类的一些实际例子是什么?

Cli*_*ote 17 java oop abstract-class

何时以及为什么要使用抽象类?我想看看它们用途的一些实际例子.另外,抽象类和接口有什么区别?

Bli*_*ixt 9

抽象类是类的"半实现".可以使用某些通用功能部分实现它们,但将部分实现留给继承类.你可以有一个叫做抽象类Animal已经实现了一些通用的行为/值,例如Age,Name,SetAge(...).您也可以使用未实现的方法(它们abstract),就像接口一样.

接口只是指定应该可用于类的行为的契约.您可以拥有一个接口,例如IWalker需要公共方法Walk(),但没有具体说明如何实现.


lau*_*ura 5

完全抽象的类(所有方法都是抽象的)(几乎)与接口相同(主要区别在于它们可以包含字段和非公共抽象方法,哪些接口不能).区别在于您有一个抽象类,其中包含一个方法,该方法具有一些对所有派生子项都相同的常用功能.

例如,如果要对文件系统建模,您就会知道,无论对象类型如何,您都将拥有项目的路径.你想要有一个共同的实现来获得这条路径(一遍又一遍地写同样的东西没有意义),并为孩子们留下一些特别的实现.


Pas*_*ent 5

抽象类与接口

与接口不同,抽象类可以包含非静态的字段final,并且它们可以包含已实现的方法.这些抽象类与接口类似,不同之处在于它们提供部分实现,将其留给子类来完成实现.如果抽象类包含抽象方法声明,则应将其声明为接口.

多个接口可以由类层次结构中的任何位置的类实现,无论它们是否以任何方式彼此相关.想想Comparable或者Cloneable,例如.

相比之下,抽象类最常被子类化以共享实现部分.单个抽象类由具有许多共同点(抽象类的实现部分)的类似类子类化,但也有一些差异(抽象方法).

抽象类示例

在面向对象的绘图应用程序中,您可以绘制圆形,矩形,线条,贝塞尔曲线和许多其他图形对象.这些对象都具有某些状态(例如:位置,方向,线条颜色,填充颜色)和行为(例如:moveTo,rotate,resize,draw).所有图形对象中的一些状态和行为都是相同的 - 例如:position,fill color和moveTo.其他需要不同的实现 - 例如,调整大小或绘制.所有人都GraphicObjects 必须知道如何绘制或调整自己的大小; 他们只是在做不同的事情上有所不同.这是抽象超类的完美情况.您可以利用相似性并声明所有图形对象从同一个抽象父对象继承 - 例如,GraphicObject如下图所示.

类Rectangle,Line,Bezier和Circle继承自GraphicObject http://java.sun.com/docs/books/tutorial/figures/java/classes-graphicObject.gif

类Rectangle,Line,Bezier和Circle继承自GraphicObject

[...]

来源:Java™教程