Java接口与多继承
来源:互联网 发布:vim python插件 编辑:程序博客网 时间:2024/05/17 20:44
摘要 为什么说接口巧妙地实现了类似多继承的机制。使用接口的核心原因是,为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。
使用接口的核心原因是,为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。以前在学Java的时候对于接口是直接飙过去,并未尝试去深究它的意义,只是简单地记住了它是用来折衷地解决多继承问题。直到最近重新开始复习,才被这一问题弄得晕头转向的。
先来看一下为何 Java 不支持多继承,原因是多继承容易导致钻石危机(也称棱形问题),用一幅图来说明一下:
使用接口的核心原因是,为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。以前在学Java的时候对于接口是直接飙过去,并未尝试去深究它的意义,只是简单地记住了它是用来折衷地解决多继承问题。直到最近重新开始复习,才被这一问题弄得晕头转向的。
先来看一下为何 Java 不支持多继承,原因是多继承容易导致钻石危机(也称棱形问题),用一幅图来说明一下:
假设 类A 中有一个public方法 fun(),然后 类B 和 类C 同时继承了 类A,在 类B 或 类C 中各自对方法 fun()进行了覆盖,这时 类D 通过多继承同时继承了 类B 和 类C,这样便导致钻石危机了,程序在运行的时候对于方法 fun()该如何判断?
所以 Java 并不支持多继承,但是 Java 通过接口可以折衷地解决多继承问题,用一段代码来说明一下比较容易理解:
// 接口类HowToEat
public
interface
HowToEat {
public
abstract
String howToEat();
}
然后编写一个Checken类,暂时把它想象成父类。
public
class
Checken
implements
HowToEat {
@Override
public
String howToEat() {
return
"Chicken: Fry it."
;
}
}
再编写一个Orange类,同样暂时把它想象成父类。
public
class
Orange
implements
HowToEat {
@Override
public
String howToEat() {
return
"Orange: Make it juice."
;
}
}
最后我们通过测试类 MainTest 来理解接口是如何实现类似多继承机制的。
public
class
MainTest {
public
static
void
main(String[] args) {
HowToEat test =
new
Checken();
System.out.println(test.howToEat());
test =
new
Orange();
System.out.println(test.howToEat());
}
}
上面代码的运行结果如下:
原文:
http://my.oschina.net/keyven/blog/206180
- Java接口与多继承
- java继承与接口
- Java 继承与接口
- java继承与接口
- java的接口与多继承!(转)
- java接口继承与多态
- Java继承、接口与多态
- java 类的单继承与接口的多继承
- 澄清Java----接口与继承
- java基础:继承与接口
- Java继承关系与接口
- java基础-继承与接口
- java的继承与接口
- JAVA 单继承 与 接口 多重继承
- java 类继承与接口继承
- JAVA 单继承 与 接口 多重继承
- JAVA 单继承 与 接口 多重继承
- java 接口多继承
- 在IOS 7中使用Storyboard
- linux下新建用户和用户组
- Vijos1093. 文科生的悲哀
- B. Design Tutorial: Learn from Life
- ifstream ostream istream ostream 不能声明
- Java接口与多继承
- node 节点
- IOS应用沙盒机制与文件操作
- SQL Server 2008数据库重命名方法
- Hibernate get和load区别
- WinForm(C#)中跨线程访问控件的解决方法
- Video/Motion Segmentation Dataset and Benchmark
- JS处理JSON字符串
- UIScrollView加到导航控制器注意加一句话