为何Java 类不支持多继承?
来源:互联网 发布:python 循环定时器 编辑:程序博客网 时间:2024/06/05 03:10
1.问题由来
本文部分内容引自此处,感兴趣者可以直接查看原链接。
Java语言特性之一是, 确切的说,其类对于多继承是不支持的(接口可以多继承),但是这是为什么呢?记得Thinking in Java中对于该问题有所阐述,单继承时,JVM的GC机制很好实现,有没有其他更深层次的原因呢?
2.问题解释
A foo() / \ / \ B foo() C foo() \ / \ / D foo()
1). 首先是上图所示的‘钻石问题’。如果我们这时要调用的是foo()方法,编译器并不知道调用的是哪一个类的方法,这就会很尴尬了。
class A{ public void foo(){ }}class B extends A{ public void foo(){ }}class C extends A{ public void foo(){ }}//Not allowed here.public class D extends B, C{ public void foo(){ }}
但我们知道,其实C++中是支持多继承这个特性的,那么为什么Java不支持呢?下面会给出该问题的解答,其实这并不是一个技术上的问题,而是设计风格的问题,Java语言设计之初将其可维护性和设计的简洁性放在了很重要的地位,因而采取了单继承的策略。
2). 第二个原因是:多继承使得系统设计很繁杂,而且在类型转换、链式构造函数等问题上代价很大;而且考虑到没有很多地方用到多继承,所以取消多继承的决定是为了语言的简洁性考虑的。
3.进一步讨论
Java中interface可以extends多个interface;
Java中class可以implements多个interface
Java中的class只能extends 一个class。
Q: 为何Java可以支持实现多个接口?
A: 因为接口只有方法的声明部分,并没有提供方法实现,因而特定的方法只有一种实现,故而不会产生二义性。
Java实现多继承的方式
interface A{ void test();}interface B{ void test();}class C implements A,B{ @Override public void test(){ }}
阅读全文
1 0
- 为何Java 类不支持多继承?
- Java 不支持多继承
- java不支持多继承思考
- Java不支持多继承,但是。。。
- java为什么不支持多继承
- Java为什么不支持多继承
- 为什么Java不支持多继承
- Java为什么不支持多继承
- java为什么不支持多继承
- 为什么Java不支持多继承?
- java为什么不支持多继承
- java不支持多继承的原因
- Java 不支持多继承,所以引入接口
- java 中不支持多继承的原因
- Java不支持多继承的原因
- 为何Java不支持泛型数组
- 为什么Java不支持多重继承
- 为什么Java不支持多重继承?
- 【已解决】fiddler抓包时出现443的问题
- Java基础总结
- 利用函数指针实现多级排序
- POJ
- 词汇暴增总结
- 为何Java 类不支持多继承?
- 【php中的curl】php中curl的详细解说
- 数据存储——HashMap,Hashtable的区别
- hdu1214 Repair the Wall
- jctf2014RE200
- 图像处理基础(4):高斯滤波器详解
- 最小k个数之和
- D
- uva-11806 容斥