1.19 利用内部类实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道 Java 为了保证数据安全,只允许单继承。
有些时候我们会认为如果系统中需要使用多重继承,那往往都是糟糕的设想,这时开发人员往往需要思考的不是怎么使用多重继承,而是他的设计是否存在问题。但是,有时候开发人员确实需要实现多重继承,而且现实生活中真正地存在这样的情况,例如遗传,我们既继承了父亲的行为和特征,也继承了母亲的行为和特征。
Java 提供的两种方法让我们实现多重继承:接口和内部类。
例 1
本节我们以生活中常见的遗传例子进行介绍,如儿子(或者女儿)是如何利用多重继承来继承父亲和母亲的优良基因的。
1)创建 Father 类,在该类中添加 strong() 方法。代码如下:
public class Father {public int strong() { // 强壮指数return 9;}
}
2)创建 Mother 类,在该类中添加 kind() 方法。代码如下:
public class Mother {public int kind() { // 友好指数return 8;}
}
3)重点在于儿子类的实现,创建 Son 类,在该类中通过内部类实现多重继承。代码如下:
public class Son {// 内部类继承Father类class Father_1 extends Father {public int strong() {return super.strong() + 1;}}class Mother_1 extends Mother {public int kind() {return super.kind() - 2;}}public int getStrong() {return new Father_1().strong();}public int getKind() {return new Mother_1().kind();}
}
上述代码定义两个内部类,这两个内部类分别继承 Father(父亲)类和 Mother(母亲)类,且都可以获取各自父类的行为。这是内部类一个很重要的特性:内部类可以继承一个与外部类无关的类,从而保证内部类的独立性
。正是基于这一点,多重继承才会成为可能。
4)创建 Test 类进行测试,在 main() 方法中实例化 Son 类的对象,然后分别调用该对象的 getStrong() 方法和 getKind() 方法。代码如下:
public class Test {public static void main(String[] args) {Son son = new Son();System.out.println("Son 的强壮指数:" + son.getStrong());System.out.println("Son 的友好指数:" + son.getKind());}
}
执行上述代码,输出结果如下:
Son 的强壮指数:10
Son 的友好指数:6
从实现代码和输出结果可以发现,儿子继承父类,变得比父亲更加强壮;同时也继承了母类,只不过友好指数下降。
1.19 利用内部类实现多重继承相关推荐
- 第十九章 19 利用私有继承来实现代码重用
//19 利用私有继承来实现代码重用 //我们还有一种方法来实现这种包含式的代码重用,那就是私有继承,派生类从基类私有继承后,其类的公有成员和保护成员在派生类中都是私有成员,私有成员成为不可访问的成员 ...
- java用内部类实现多重继承
最常见的实现多重继承的方式,是implements interface1,interface2,interface3- 也可以通过多个内部类extends多个抽象类. 示例如下 public clas ...
- 5.19 利用图层组来管理图层 [原创Ps教程]
原文:http://coolketang.com/staticPhotoshop/5a98d4ad9f54544201615f06.html 1. 本节课程将为您演示,如何使用图层组,来管理图层过多的 ...
- 笔记19 | 利用MediaRecorder实现录像
前言 通过上篇通过MediaRecord实现录音后,对MediaRecord有了基本的了解,本篇是通过其实现视频的录制 地址 前人栽树:http://www.cnblogs.com/whoislcj/ ...
- Java提高篇——Java实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- java多重继承用在什么地方_Java提高篇——Java实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- java提高篇(九)-----实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- Java基础篇:多重继承的实现
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...
- Java实现多重继承
多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.Java提供了两种方式让我们曲折来实现多重继承:接口和内部类. ①接口和内部类的应 ...
最新文章
- 从web三层架构解析软件错误
- 海天 oracle,Oracle执行计划详解
- Django 函数和方法的区别
- delphi和 java通过socket通信的中文问题
- Python分析热门话题“不生孩子的人后来都怎么了”,看看丁克家庭最后都怎么样了...
- 微信做了个新功能,网友并不买账:就为了给QQ充会员?
- [2-sat]HDOJ3622 Bomb Game
- c:递归算法的三个demo:八皇后问题、台阶问题、汉诺塔
- ES6新特性之 promise
- Ubuntu下mysql远程连接失败MySQL said: Can't connect to MySQL server on 'XXXXXX' (61)
- 恭喜本月拍牌中标了-上海!
- [蓝桥杯]分解质因数
- VB对IE浏览器完全控制
- Python hypot() 函数
- ESXi-6.7.0U3b nvme固态硬盘无法识别解决方法
- Python中[ : n]、[m : ]、[-n]、[:-n]、[::-n]、[m::-n]和[m:]的含义
- 罗克韦尔协议转换网关WTGNet-AB
- IDEA运行main方法找不到类java.lang.ClassNotFoundException: javax.servlet.ServletRequest
- gp-greenplum-vacuum-资源回收-AO表空间回收
- 408总线的串并行分类及系统总线局部总线分类
热门文章
- Py之logging:logging的简介、安装、使用方法之详细攻略
- DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术
- 成功解决import matplotlib; matplotlib.use('Agg') # pylint: disable=multiple-statements
- PyQt之Eric:成功解决No module named 'my_image_rc'
- HiveSQL中复杂数据类型操作
- Intent 匹配规则
- 使用socket的Linux上的C语言文件传输顺序服务器和客户
- (转载)关于IAP与APP互相跳转的实现
- android6鼠标驱动,USB鼠标按键驱动(示例代码)
- mysql按章_mysql按时间范围分区