多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道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提高篇-----抽象类与接口
分享到:
相关推荐
2. 课程包含: JDK安装、开发环境搭建,java编程基础知识,分支语句、循环语句、封装、继承、多态等并配备相应练习题,希望对大家有所帮助。 PS:只做java是动力节点的战略布局,让每位初学者顺利入门是动力节点零...
Java编程思想之接口Java中实现多重继承
多重继承(6_7钻石继承问题)多重继承(6_6)多重继承(6_7钻石继承问题)多重继承(6_6)
JAVA题库习题及答案,JAVA题库习题及答案,JAVA期末试卷题库习题及答案,JAVA题库习题及答案
C++的多重继承功能较广,Java的interface功能只是其中的一个子集。因为C++的虚拟函数可以有纯虚拟函数,也可有非纯虚拟函数,而Java只有抽象函数,所以功能模式少一种,自然能达到的效果较少一些。 但这并不代表Java...
Java不允许多重继承,多重继承必须通过接口实现。 Java引进了abstract 和final修饰词。 带abstract的类称为抽象类,只能作为父类使用, 不能直接产生实例对象。 带final的类不能用作父类被继承, 带final的...
Java不支持多重继承。即一个子类不能拥有两个或以上 的父类。 3、包 、包的定义 在Java中,把相关的代码组织到一起,称为"包"。包市一种将相关类、接口或其他包 组织起来的集合体,目的是为了将包含类代码的文件组织...
文章目录Java语言基础-类的继承继承的特点继承的分类继承的写法重写规则:“三同一小一大”...多重继承—–子类可以有多个直接父类 继承的写法 格式: 父类{ 父类的内容 } 子类 extends 父类{ 子类的内容 } 例: p
Java不支持多重继承。即一个子类不能拥有两个或以上 的父类。 3、包 、包的定义 在Java中,把相关的代码组织到一起,称为"包"。包市一种将相关类、接口或其他包 组织起来的集合体,目的是为了将包含类代码的文件组织...
Java不支持多重继承。即一个子类不能拥有两个或以上 的父类。 3、包 、包的定义 在Java中,把相关的代码组织到一起,称为"包"。包市一种将相关类、接口或其他包 组织起来的集合体,目的是为了将包含类代码的文件组织...
多重继承 C++11 特性 重载 operator new 和 operator delete 内存管理 其他一切都应该与初始版本一起使用。 示例代码 以下几行指示使用指针生成的代码是什么样的。 // Test plain assignment... f[ 4 ] = 111 ; *f =...
主要介绍了C++中的多态与多重继承实现与Java的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了java为什么不允许类多重继承却允许接口多重继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量...
4-2 方法的重载与方法的覆盖分别代表什么含义? 方法的重载:在同一个类中定义多个同名...JAVA中不支持多重继承,而是通过接口实现比多重继承更强的功能,Java通过接口使处于不同层次甚至不相关的类可以有相同的行为。
1.9 Java、Internet与万维网--------------------------------------------7 1.10 其它高级语言------------------------------------------------------8 1.11 结构化编程-----------------------------------...
包与接口实验报告 实验 包与接口 【实验目的】 1. 了解Java 中包(package)、接口(interface)的作用。...接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再 被引用的对象所占据的内存空间,使得程序员不用再...
Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性...
移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对Java语言的解释是:“Java编程语言是个...