多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承。有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要思考的不是怎么使用多重继承,而是您的设计是否存在问题.但有时候我们确实是需要实现多重继承,而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征。可幸的是Java是非常和善和理解我们的,它提供了两种方式让我们曲折来实现多重继承:接口和内部类。

一、 接口

在介绍接口和抽象类的时候了解到子类只能继承一个父类,也就是说只能存在单一继承,但是却可以实现多个接口,这就为我们实现多重继承做了铺垫。

对于接口而已,有时候它所表现的不仅仅只是一个更纯粹的抽象类,接口是没有任何具体实现的,也就是说,没有任何与接口相关的存储,因此也就无法阻止多个接口的组合了。

interface CanFight {void fight();
}interface CanSwim {void swim();
}interface CanFly {void fly();
}public class ActionCharacter {public void fight(){}
}public class Hero extends ActionCharacter implements CanFight,CanFly,CanSwim{public void fly() {}public void swim() {}/*** 对于fight()方法,继承父类的,所以不需要显示声明*/
}

二、内部类

上面使用接口实现多重继承是一种比较可行和普遍的方式,在介绍内部类的时候谈到内部类使的多继承的实现变得更加完美了,同时也明确了如果父类为抽象类或者具体类,那么我就仅能通过内部类来实现多重继承了。如何利用内部类实现多重继承,请看下面实例:儿子是如何利用多重继承来继承父亲和母亲的优良基因。

首先是父亲Father和母亲Mother:

public class Father {public int strong(){return 9;}
}public class Mother {public int kind(){return 8;}
}

重头戏在这里,儿子类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();}
}

测试程序:

public class Test1 {public static void main(String[] args) {Son son = new Son();System.out.println("Son 的Strong:" + son.getStrong());System.out.println("Son 的kind:" + son.getKind());}}
----------------------------------------
Output:
Son 的Strong:10
Son 的kind:6

儿子继承了父亲,变得比父亲更加强壮,同时也继承了母亲,只不过温柔指数下降了。这里定义了两个内部类,他们分别继承父亲Father类、母亲类Mother类,且都可以非常自然地获取各自父类的行为,这是内部类一个重要的特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。

有关于更多接口和内部类的详情,请参考这里:

内部类: java提高篇----详解内部类

接口: java提高篇-----抽象类与接口

作者: chenssy 
出处: http://www.cnblogs.com/chenssy/

from: http://www.cnblogs.com/chenssy/p/3389027.html

java提高篇(九)-----实现多重继承相关推荐

  1. Java提高篇——Java实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

  2. java提高篇之数组(2)

    前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...

  3. java提高篇(八)----详解内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  4. java提高篇之详解内部类

    转载自 java提高篇之详解内部类 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无 ...

  5. java提高篇之抽象类与接口

    转载自 java提高篇之抽象类与接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的 ...

  6. 【转】java提高篇(十)-----详解匿名内部类

    原文网址:http://www.cnblogs.com/chenssy/p/3390871.html 在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节 ...

  7. java提高篇(三十)-----Iterator

    本文转载地址:            http://blog.csdn.net/chenssy/article/details/37521461 迭代对于我们搞Java的来说绝对不陌生.我们常常使用J ...

  8. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  9. Java提高篇 —— Java三大特性之继承

    一.前言 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事 ...

最新文章

  1. 关于Mybaits,我总结了10种通用的写法
  2. 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
  3. 5-struts2知识补充( 常用的struts2的标签,数据回显,防止重复提交)
  4. 洛谷 - P2472 [SCOI2007]蜥蜴(最大流)
  5. Android开发之Java和Kotlin混合开发互相跳转报错的问题
  6. oracle统计每日归档大小,Oracle查询最近几天每小时归档日志产生数量的脚本写法...
  7. YBTOJ洛谷P2839:最大中位数(主席树、二分答案)
  8. lua中keyvalue_40行中的持久性KeyValue Server和一个可悲的事实
  9. 研发团队绩效_如何在团队内部建立网络绩效文化
  10. php报内存溢出,php为什么运行了一段时间后才报内存溢出?
  11. 谷歌不支持调用摄像头麦克风_向来只软不硬的谷歌,要对你的手机来狠的
  12. echarts折线图y轴根据数值自动_Python matplotlib 绘制双Y轴曲线图的示例代码
  13. iOS App图标和启动画面尺寸http://www.jianshu.com/p/adpKye
  14. java ojdbc7_ojdbc7 / ojdbc8中的charset问题与ojdbc6
  15. 计算机-flash遮罩层动画,flash遮罩层动画作业
  16. M27C64A引脚说明
  17. aic准则python_Python数据科学:线性回归
  18. 美国电气与计算机工程专业排名,美国电气与计算机工程专业排名怎么样?美国电气与计算机工程专业大学推荐...
  19. 如何用css实现一段文字的两端对齐和分散对齐
  20. mysql动态网站_PHP+MySQL动态网站开发与全程实例

热门文章

  1. Install Redis on CentOS 6.4--转
  2. Lesson 7 (3) 深入理解PyTorch与PyTorch库架构
  3. 【聚类算法】常见的六大聚类算法
  4. 中科院罗平演讲全文:自动撰写金融文档如何实现,用 AI 解
  5. 流行的就是最好的:Android开发者的职场规划
  6. Apache ZooKeeper - 线上系统日志清理
  7. Java 8 - 05 方法引用
  8. Spring Cache抽象-使用SpEL表达式
  9. 学习笔记(十五)——MySQL(查询)
  10. 图像混合模式:Android Paint Xfermode 使用和demo