Java不支持多继承的原因
来源:互联网 发布:医疗软件发展前景 编辑:程序博客网 时间:2024/05/16 02:15
概述
java不支持多继承的原因是由于多继承存在致命方块问题(diamond problem)。
举例说明致命方块问题
public abstract class Animal { /**所有动物都得吃饭*/ protected abstract void eat(); /**其他抽象的特征,行为*/}
public class Horse extends Animal { @Override protected void eat() { System.out.println("马吃饭方式是咀嚼、下咽"); } /**其他特殊、具体的行为*/}
public class Bird extends Animal{ @Override protected void eat() { System.out.println("鸟儿吃饭方式是啄食,下咽"); } /**其他特殊、具体的行为*/}
/** * Pegasus:天马,有翼的马 */public class Pegasus extends Bird,Horse { /**其他特殊、具体的行为*/}
Pegasus.java会提示Class cannot extends multiple classes,这是为什么?
解析
Bird和Horse从Animal继承了eat()方法,并重写了eat()方法。假如Java支持多继承,那么Pegasus类没写错,但是当天马执行eat()方法的时候,究竟是调用Bird的eat()方法还是Horse的eat()方法?这里就产生了歧义(ambiguity),因此Java不支持多继承。
如果想要有多继承效果,可用实现(implements)接口方式。为何接口不会产生致命方块问题,是以为接口所有的方法都是抽象的,实现的类必须得实现所有接口定义的接口,这不会存在歧义问题。
为何叫致命方块
看上面类图,发现像一个方块,所以叫方块问题(diamond problem)。这是个人认为。
Reference
为何Java不支持多继承
阅读全文
1 0
- java不支持多继承的原因
- java 中不支持多继承的原因
- Java不支持多继承的原因
- java不支持多继承支持多接口的原因
- Java 不支持多继承
- java不支持多继承思考
- Java不支持多继承,但是。。。
- java为什么不支持多继承
- Java为什么不支持多继承
- 为什么Java不支持多继承
- Java为什么不支持多继承
- java为什么不支持多继承
- 为什么Java不支持多继承?
- java为什么不支持多继承
- Java中Observable不支持多继承的解决方法
- java类单继承,接口多继承设计的原因
- Java 不支持多继承,所以引入接口
- 为何Java 类不支持多继承?
- 1020:排序问题2
- 迭代器失效总结
- 测试
- JPA实体继承的映射
- 日子不好混呐~
- Java不支持多继承的原因
- 剑指offer(5)—用两个栈实现队列
- 818低价狂欢,XMind等你来战
- Unity 封装 倒计时(计时器,CountDownTimer),实现周期更新、技能冷却等功能
- Linux IO实时监控iostat命令详解
- SpringBoot MultiPartFile To File 问题
- FreeRTOS临界段代码
- gradle 自动配置
- Tomcat中用环境变量灵活定义spring数据库文件路径