首页 理论教育 Java程序设计:继承含义及示例

Java程序设计:继承含义及示例

时间:2023-11-01 理论教育 版权反馈
【摘要】:继承描述了一种从原有类派生出新类的机制。Java通过继承实现类的可重用性和扩展性,因此是面向对象三大特征之一。图4-1Java继承关系示例在图4-1中,锐角三角形、直角三角形和钝角三角形都是三角形,而三角形和圆都是图形,它们之间存在“is-a”的关系,它们之间存在继承关系。图4-3子类HisTriangle1His Triangle1继承自父类HisGraph,没有增加新的属性和方法。图4-4测试子类继承功能本例中,子类继承了父类的功能,可以访问父类所有可以访问的成员。

Java程序设计:继承含义及示例

继承描述了一种从原有类派生出新类的机制。其中,通过继承创建的新类称为子类或派生类;被继承的类称为基类、父类或者超类。子类通过继承具有父类的属性和方法,还可以在不修改父类的前提下对原有功能进行扩展(即重新定义或增加属性和方法)。在继承关系中,继承就是一个从一般到特殊的过程,也可以说,父类是子类更高级别的抽象,父类和子类满足“is-a”的关系,即子类是父类。所有类都直接或间接继承自java.lang.Object类,它是所有类的祖先。Java通过继承实现类的可重用性和扩展性,因此是面向对象三大特征之一。

Java只支持单继承而不支持多继承,即一个子类只能有一个父类而不能有多个父类。当然,一个类可以被多个子类继承。Java支持多层继承,注意区分多层继承和多继承,多层继承是指继承体系中的多级继承,即一个类的父类还可以再继承自另外的父类。Java继承关系示例,如图4-1所示。

图4-1 Java继承关系示例

在图4-1中,锐角三角形直角三角形钝角三角形都是三角形,而三角形和圆都是图形,它们之间存在“is-a”的关系,它们之间存在继承关系。

Java摒弃了C++中难以理解的多继承,因为多继承有如下显著问题:

(1)若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。

(2)若一个子类继承的多个父类拥有相同方法,同时子类并未重写该方法(若重写,则直接使用子类中的该方法),那么调用该方法时将无法确定该调用哪个父类的方法。

以图4-1的继承关系为例,抽象出一个图形类HisGraph,如图4-2所示。

图4-2 HisGraph类

在HisGraph类中,定义了所有图形都有的名称属性,所有图形都有求面积和周长的方法。

使用关键字extends可以实现继承,具体格式为:[修饰符]class子类名extends父类名{…}。一个类如果没有使用extends关键字,表示该类直接继承自Object类(等效于extends Object)。

【例4-1】

定义一个继承自HisGraph类的三角形子类His Triangle1,子类无须扩展,并测试继承功能。(www.xing528.com)

子类His Triangle1如图4-3所示。

图4-3 子类HisTriangle1

His Triangle1继承自父类HisGraph,没有增加新的属性和方法。

下面通过测试类验证子类是否继承了父类的属性和方法,如图4-4所示。

图4-4 测试子类继承功能

本例中,子类继承了父类的功能,可以访问父类所有可以访问的成员。由于父类的name属性由private修饰,因此在子类中是不可见的,程序第5行会因为t.name导致编译出错。

注意访问控制权限修饰符对继承的影响,这里总结如下:

(1)父类中由private修饰的成员在子类中是不可见的,即子类不能访问。

(2)父类中默认权限修饰的成员,属于包访问权限成员,如果子类和父类在同一个包下,则子类中是可见的,即子类可以访问,否则子类中不可见,即子类不能访问。

(3)父类中由protected或public修饰的成员,在子类中是可见的,即子类可以访问。

(4)如果子类访问父类中可见的同名成员,则需要使用super关键字。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈