读书人

JAVASE官方课程:继承之概述(6)

发布时间: 2012-09-03 09:48:39 作者: rapoo

JAVASE官方教程:继承之概述(6)

在前面的课程中,你多次看到继承被提及.在java语言中,类可以派生于其它的类,包括其它类中的属性和方法.

?

声明:

继承类叫做子类(也叫做派生类,扩展类).被继承的类叫做超类(也叫做基类,父类).

除了Object没有父类,其它的类都有且只有一个父类(单继承).在定义一个类时若没有父类,则隐含继承Object,每一个类都是Object类的子类.

?

继承的思想是简单并且强大的:当你想创建一个新类,并且已经存在的类中有你想要的代码,你可以从已经存在的类派生出新类.

?

一个子类从父类继承所有的成员(members).构造函数不是成员,所以不被继承,但是可以在子类中调用父类构造方法.

?

Java平台的类继承

在java.lang包中的Object类定义并且实现了所有类的共同行为.在Java平台,大多数类直接派生与Object类,下面是类继承结构.

?

JAVASE官方课程:继承之概述(6)


Object类是通用的,在继承结构的最顶端.靠近底端的类则提供更加具体的行为.


一个继承的例子

public MountainBike myBike = new MountainBike();

?

那么myBike是MountainBike类型的.

?

MountainBike是Bicycle类和Object类的后代.所以,一个MountainBike是一个Bicycle也是一个Object,他可以被用在所有Bicycle或者Object类型的的地方.

?

反过来就不一定是对的了:一个Bicycle可能是一个MountainBike,也可能不是.转换(Casting)展示了一种类型替代另一种类型的用法,例如:


Object obj = new MountainBike();

?

obj既是一个Object,也是一个MountainBike.这叫做隐式转换.

?

另一方面,我们写

?

MountainBike myBike = obj;

?

我们将会得到一个编译时错误,因为编译器不知道obj是一个MountainBike.然而,我们可以用现实类型转换告诉编译器我们保证给obj赋值的MountainBike:


MountainBike myBike = (MountainBike)obj;

?

这种转换将对obj的赋值插入一个运行时检查(runtime check)让编译器能够安全地认为obj是一个MountainBike.如果obj在运行时不是一个MountainBike,将抛出一个异常.

?

注意:你可以用instanceof操作符测试一个特定对象的类型.可以让你避免因为一个不合适的转换而发生运行时错误.例如:
if (obj instanceof MountainBike) {
?? MountainBike myBike = (MountainBike)obj;
}

读书人网 >编程

热点推荐