复杂类继承体系结构下,实际的类定义
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
相关文章推荐
- 设计模式
- 放苹果题解
- mysql游标循环的使用
- OC中创建对象,存入数组,并且遍历对象
- Derived class重新定义继承而来的Private Virtual函数
- LeetCode 119 Pascal's Triangle II(帕斯卡三角形II)(vector、数学公式)(*)
- Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
- Ubuntu14.04 搜索不到WIFI或连接不上的解决方法。
- 处理死链接
- SQL Server代理(3/12):代理警报和操作员
- Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
- 整数去重题解
- MyBatis与Hibernate的比较
- 安卓蓝牙篇-适合入门
- MySQL游标的使用
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)
- MD5
- 人人必知的10个jQuery小技巧
- 数据结构(C实现)------- 单链表
- android camera HAL 错误数据流处理