继承是
面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
基本介绍
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
类和类之间的继承关系可以用UML符号表示,其中父类又叫
超类或
基类,子类又叫
派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
在
面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的
数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为
基类、父类或
超类,而称继承类B为A的
派生类或子类。
继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得
系统模型比较简练也比较清晰。
分类
Java继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来
二义性,在实际应用中应尽量使用单继承。
Java语言中的类只支持单继承,而
接口支持多继承。Java中多继承的功能是通过接口(
interface)来间接实现的。
特征
(1)继承关系是传递的。若类C继承类B,类B继承类A(多层继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了
软件复用功能。若类B继承类A,那么建立类B时只需要再描述与
基类(类A)不同的少量特征(
数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供
多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
继承格式
实例
构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参构造器。
优势
Java继承的从某种意义上讲,
Java继承的短暂美就如同宇宙中所有事与其它事情都存在一种特殊的关系。教育者试图向门外汉们解释继承的概念,常常通过讨论相关动物群之间的关系来解释这一概念。在
Java和
NET中,在某种程度上讲,所有事物都是对象类型的一种软件组件。然而,从那里开始,开发选择什么在子类和超类继承中进行关联是设计的重点。
使用Java进行桌面渲染中的问题是,过多的思想投入到把在一起的可视化项目进行分组。从亲子关系来看,所有地的知名的图形元素,虽然知名的方法不同,但都与一般的
Window类有着极大的关系。所有我们选择的、继承于Window类的,与
JDialog属性有关的东西,都与上一级的
JFrame有关,因为他们有共同的父Window类。的确,编写可重用的代码来管理许多相关的子对象是优秀设计的标志。正如上文说的狗和窗户一样,伟大的多态设计都是关于抽象、分类、设计、和继承的。