您的位置:首页 > 其它

复杂类继承体系结构下,实际的类定义

2016-01-23 10:12 316 查看

一、概念

“ 复杂的类继承体系结构和类资源名称冲突解决”中介绍了复杂的类继承体系结构。又由“《Java编程思想》第六章 访问权限控制”可知,在继承过程中,子类会隐式复制父类中可被继承的类资源,从而得到扩展后的子类的实际类定义。那么在复杂的类继承体系中,实际的类定义又有怎样的特点呢?

在复杂的类继承体系中,根据最终子类的实际类定义,可以得到一个跟类继承体系结构类似的该子类中的类资源层次结构,其中父类中不可被继承的类资源被排除在外。

二、例子

2.1、例子1

假如现在有一个“C.java”文件,文件内容如下所示:

public class C extends B implements IIIA, IIIB {
int a = 90;
}

abstract class A {
int a = 10;
}

class B extends A {
int a = 20;
}

interface IA {
int a = 30;
}

interface IIA {
int a = 40;
}

interface IIIA extends IA, IIA {
int a = 50;
}

interface IB {
int a = 60;
}

interface IIB {
int a = 70;
}

interface IIIB extends IB, IIB {
int a = 80;
}


那么其中包含的类继承体系结构如图1所示。根据类C的实际类定义,可得到类C的数据成员类资源层次结构如图2所示。

图1



图2



2.2、例子2

修改上述“C.java”文件,修改后内容如下:

public class C extends B implements IIIA, IIIB {
public int f() {
return 10;
}
}

abstract class A {
abstract int f();
}

class B extends A {
int f() {
return 10;
}
}

interface IA {
int f();
}

interface IIA {
int f();
}

interface IIIA extends IA, IIA {
}

interface IB {
int f();
}

interface IIB {
int f();
}

interface IIIB extends IB, IIB {
}


上述代码包含的类继承体系结构跟图1一致。此时根据类C的实际类定义,可得到类C的方法类资源层次结构如图3所示。

图3



2.3、例子3

再修改上述“C.java”文件,修改后内容如下:

public class C extends B implements IIIA, IIIB {
int a = 90;

public int f() {
return 10;
}
}

abstract class A {
int a = 10;

private int f() {
return 10;
}
}

class B extends A {
private int a = 20;

private int f() {
return 10;
}
}

interface IA {
int a = 30;

int f();
}

interface IIA {
int a = 40;

int f();
}

interface IIIA extends IA, IIA {
int a = 50;
}

interface IB {
int a = 60;

int f();
}

interface IIB {
int a = 70;

int f();
}

interface IIIB extends IB, IIB {
int a = 80;
}


上述代码包含的类继承体系结构跟图1一致。此时根据类C的实际类定义,可得到类C的数据成员和方法类资源层次结构如图4所示。

图4

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: