大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: 接口与多重继承

在很多时候,又常会听别人说,接口(interface)可以达到多重继承的效果,这是怎么回事?

其实要讨论这个问题,首先您对于C++中多重继承要先有认识,新手看了书说接口可以达到多重继承,切莫人云亦云,尤其是没有学过C++的新手们,如果您对 于C++多重继承想要有所认识,请先看看 多 重继承(一)多 重继承(二)

Java不能多重继承,但为何说Java中可以使用接口(interface)来达到多重继承的效果,首先效果之一,就如 多 重继承(二) 中描述的“ 多重继承时通常其中一个基底类作为private实现体,而其它的用以表现完全的抽象接口。”,在Java中这个效果可以使用接口来达到,接口此时所扮 演的即 多 重继承(二) 中的抽象类,一个完全的抽象接口,这个效果的达成方式,如 接 口(interface)类型 中所介绍的,您可以直接对应这两个主题中的程序实现来了解,了解Java中如何使用接口(interface)来达到C++中所谓多重继承的“一种”效 果。

来看看另一个情况。

如果有SomeClass类与OtherClass类,您想要SomeAndOther类可以同时拥有SomeClass类与 OtherClass类中已定义好的操作,并可以进行多态操作,在C++中可以用多重继承来达到,但在Java中显然的无法使用多重继承,怎么办?您可 以在设计上先绕个弯,先使用两个接口分别定义好SomeClass与OtherClass两个类的公开方法,例如:

  • ISome.java
public interface ISome {
    public void doSome();
}

  • IOther.java
public interface IOther {
    public void doOther();
}

接着让Some与Other类分别实现两个接口:
  • Some.java
public class Some implements ISome {
    public void doSome() {
        ....
    }
}

  • Other.java
public class Other implements IOther {
    public void doOther() {
        ....
    }
}


SomeAndOther如何同时拥有两个Some与Other类已定义好的操作?并可以多态操作?SomeAndOther可以 继承其中之一,并拥有其中之一,例如:
  • SomeAndOther.java
public class SomeAndOther extends Some implements IOther {
    private IOther other = new Other();

    public void doOther() {
        other.doOther();
    }
}

虽不满意,但至少解决了目前的问题,当然这边只是其中一例,毕竟C++是C++,Java是Java,两者语法并不是一对一的关系,视实际需求还可以变化 一下。