interface的多继承?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zdsdiablo/article/details/570007

java是没有多继承的,只能通过接口的方式来实现这个功能。这点大家也都知道。今天看到一个interface写法很怪异,想了半天没想明白。开始还以为是自己太久没看java生疏了,问别人居然也不懂,上网一查才看到这样的写法:

认为正确使用物件导向技术中之「多重继承」观念﹐应该如下面的例子:

假设有一个木造门﹐则:

1. 此木造门是门的一种(a kind of)。

2. 但门不是木造门的一部份(a part of)。

3. 木造门是木制品的一种。

4. 但木制品不是木造门的一部份。

5. 木制品不是门的一种。

6. 门也不是木制品的一种。



所以您可以发现﹐多重继承在使用时﹐必须非常小心﹐而且在许多时候﹐其实我们并不需要多重继承的。

Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。如以Java程式语言的角度来看﹐Java的interface则表示:一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一个interface中﹐然后让所有不同类别的Java物件可以共同操作使用之。

所以﹐对于Java的继承与interface﹐我们总结如下:

1.Java的class只能继承一个父类别(用extends关键字)﹐但可以拥有(或称实作)许多interface(用implements关键字)。

2.Java的interface可以继承许多别的interface(也是用extends关键字)﹐但不可以实作任何interface



因此﹐我们可以利用Java的interface来模拟C++的多重继承。如上面的例子可以转化如下:

interface Test1 {

public void f1();

public void g1();

}

interface Test2 {

public void f2();

public void g2();

}

interface Test3 extends Test1, Test2 {

public void gg();

}

class CTest implements Test3 {

public void f1() { System.out.println("Test1::f1()"; }

public void g1() { System.out.println("Test1::g1()"; }

public void f2() { System.out.println("Test2::f2()"; }

public void g2() { System.out.println("Test2::g2()"; }

public void gg() { System.out.println("Test3::gg()"; }

}

class Run {

public void run() {

CTest ct=new CTest();ct.f1();ct.f2();

ct.g1();ct.g2();ct.gg();

}}

class Main {

public static void main (String args[]) {

Run rr=new Run();

rr.run();

}}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页