多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道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基础篇:多重继承的实现相关推荐

  1. Android面试题Java基础篇

    Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech 系列文章目录: ...

  2. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  3. 你所需要的java基础篇深入解析大汇总

    java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序 ...

  4. Java基础篇4——数组

    Java基础篇4--数组 1.数组的概念 当需要在Java程序中记录单个数据内容时,则声明一个变量即可 当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数 组即可,一维数组本质上就是 ...

  5. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

  6. Java基础篇2——运算符

    Java基础篇2--运算符 1.运算符 1.1.算数运算符 +表示加法运算符 -表示减法运算符 *表示乘法运算符 /表示除法运算符 %表示取余运算符 1.2.关系运算符 所有以关系运算符作为最终运算的 ...

  7. Java基础篇1——变量与数据类型

    Java基础篇1--变量与数据类型 1.标识符命名规则 标识符以由大小写字母.数字.下划线(_)和美元符号($)组成,但是不能以数字开头. 大小写敏感 不能与Java语言的关键字重名 不能和Java类 ...

  8. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)

    菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...

  9. 菜鸟学习笔记:Java基础篇6(数组、字符串)

    菜鸟学习笔记:Java常用类(数组.字符串) 数组 概述 数组的定义 二维数组 数组查找和排序 查找 排序 数组运用--字符串 不可变字符序列(String) 可变字符序列(StringBuilder ...

  10. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)

    菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...

最新文章

  1. 电气毕业什么都不会怎么办?电气专业毕业的都去干什么了?
  2. 大咖专栏|拨云见月,专注于深度学习本身
  3. java过滤器命名_java--FilenameFilter文件过滤器
  4. 添加Graphic Drivers PPA
  5. 如何实现在O(n)时间内排序,并且空间复杂度为O(1)
  6. 海量日志分析方案--logstash+kibnana+kafka
  7. SQL select 语法(转)
  8. 美团无人配送CVPR2020论文CenterMask解读
  9. RESTful测试工具RESTClient
  10. 软件测试报告doc,软件测试报告.doc
  11. Java编程中“为了性能”尽量要做的26点
  12. linux下NIS服务的配置
  13. 微型计算机三级项目,微机原理三级项目.doc
  14. java 高级查询插件_javascript高级组合查询控件(0.4更新)
  15. spring mvc+mybatis ios android整合cms内容发布平台
  16. RTSP视频流开发经验总结
  17. 基于python的三维射线追踪库-ttcrpy详解(3)
  18. 2020年春节抢票神器
  19. 通过任意数量点拟合曲线
  20. 湿气重怎么办?湿气有哪些危害?祛湿建议首选云植祛湿颗粒

热门文章

  1. 四十三、Linux磁盘管理和Shell编程
  2. 计算机语言是人们设计用于人与计算机交互,计算机语言是人们设计的用于人与计算机交互,计算机能够______与执行的一套规约和语法的集...
  3. Jetpack Compose学习笔记
  4. 博后招募 | 清华大学电子系姚权铭教授招聘机器学习方向博士后
  5. 明晚直播 | 做持有专利的程序员很难吗?专家教你如何申请!
  6. 指哪分哪:交互式分割近期发展
  7. 岗位推荐 | 微软AI Research Group招募自然语言处理AI算法研究实习生
  8. ICDAR 2019国际竞赛召开在即,百度联合学界重奖破局者!
  9. 安装graphviz
  10. ps ico插件_常用 PS 插件合集(1)