首页 百科知识 子类继承的方法所操作的成员变量

子类继承的方法所操作的成员变量

时间:2022-08-25 百科知识 版权反馈
【摘要】:Java语言的继承充分体现了遗传和变异的特点。下面通过例5-1来讨论继承的概念。继承实际上是两个类之间的一种关系。或者说,继承是由已有的类创建新类的机制。被继承的类称为父类或超类,继承的类称为子类。在Java语言中,对象反映了客观世界中的实体,类反映了客观世界中实体的所属类型。单继承使类的层次结构呈现树状结构。Java还提供不同层次的标准类,使用户可根据需要派生自己的类。

5.1 继承的概念

“种瓜得瓜,种豆得豆”、“有其父必有其子”,这些都是现实世界中的遗传现象;“一母生九子,连母十个样”、“青出于蓝而胜于蓝”,这些都是现实世界中的变异现象。Java语言的继承充分体现了遗传和变异的特点。下面通过例5-1来讨论继承的概念。

【例5-1】 在圆类基础上,添加新的变量和方法扩展成圆柱体类,实现继承。

img273

img274

程序运行结果:

分析与思考:(1)继承性:从程序运行结果可知,Cylinder类拥有实例变量radius、实例方法getArea()。这是从Circle类继承来的。Circle称为父类或超类,Cylinder称为子类。

(2)扩展性:Cylinder类在继承了超类Circle变量和方法的基础上,添加新的变量height和新的方法getVolume()。子类一般比超类具有更多的成员。

(3)“is a”特性:o=obj;可以;obj=o;不行。这说明一个子类实例可以赋给一个超类类型变量,反之不行。

(4)o=obj后,通过超类类型变量只能访问该超类中具有的成员,不能引用子类中派生的成员,如不能引用o.getVolume()。类型“类”规定了该类对象可引用的变量和方法。

(5)double radius=10;改为private double radius=10;,在Ex05_1类中,凡是出现引用radius的地方都出错,说明私有成员不能被继承。如果将getVolume()中return getArea()*height;改写为return Math.PI*radius*radius*height;会出现什么结果?

模仿例5-1:定义一个表示矩形的类,在此基础上扩展成立方体类。

继承实际上是两个类之间的一种关系。当一个类获取另一个类中所有非私有的变量和方法时,就称这两个类之间具有继承关系。或者说,继承是由已有的类创建新类的机制。被继承的类称为父类或超类,继承的类称为子类。

在Java语言中,对象反映了客观世界中的实体,类反映了客观世界中实体的所属类型。类的继承反映了客观世界的层次关系。

客观世界层次关系的特点,体现在父类和子类上,使它们具有相应的特性。

·继承性。子类可以继承父类中所有非私有的变量和方法。类继承不改变成员的访问权限,父类中的成员为公有的或被保护的,则其子类的成员访问权限也继承为公有的或被保护的。

·扩展性。子类不仅继承父类的非私有的变量和方法,更重要的是在此基础上,增加自己特有的变量和方法来进行扩展。或者说,高层的类定义了下层子类都拥有的变量和方法,并为多数方法提供默认实现代码,从而提高了代码复用。

·覆盖性。父类中的方法,在子类中用不同的方式去实现。将在方法覆盖中讲述。

·“is a”特性。子类一定可当做一个父类,而父类未必一定可当做一个子类。

A类一定可当做一个B类,而B类未必一定可当做一个A类。如果两个类具有这种关系,那么,这两个类就具有继承关系。

继承的优点是:

·程序结构清晰;

·实现代码复用,编程量减少;

·易于修改和维护。

在Java语言中,只允许单继承。所谓单继承是指每个类只有一个父类,不允许有多个父类。Java语言的多继承可通过接口来实现。

单继承使类的层次结构呈现树状结构。除了Object类外,所有的类都是直接或间接地继承Object类而来的。Object类作为所有类的父类,也是这个树状结构的根类。它定义了和实现了树状结构中所有类的共同行为。这个Object类定义在java.lang包中。Java还提供不同层次的标准类,使用户可根据需要派生自己的类。

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

我要反馈