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

来源:互联网 发布:淘宝装修队模板免费 编辑:程序博客网 时间:2024/06/07 15:13

一、概念

在“ 复杂的类继承体系结构和类资源名称冲突解决”中介绍了复杂的类继承体系结构。又由“《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
这里写图片描述

0 0
原创粉丝点击