了解多重继承和接口

时间:2012-06-06 07:14:08

标签: java oop interface multiple-inheritance

我理解一个范围的多重继承和接口。是否可以使用多重继承来实现我的要求?

我有A,B,C,D类,分别实现InterA,InterB,InterC,InterD接口。我想要一个ABCD类,它应该具有A,B,C,D的所有方法。然后我希望在ABCD类中可以使用InterA,InterB,InterC,InterD中声明的方法。

我已经在类A,B,C,D中定义了InterA,InterB,InterC,InterD中的方法实现,我不想在ABCD类中再次定义。我怎么能用Java做到这一点?

4 个答案:

答案 0 :(得分:2)

接口的目的是确保实现该接口的类将实现该接口中声明的所有方法。

例如:

public interface Flyer {

    public void fly();
}

上述接口确保实现Flyer接口的任何Java类都具有fly方法的实现,而不管实现该方法的方式。

例如:

public class Bird implements Flyer {

    public void fly() {
        System.out.println("Bird is flapping");
    }
}

另一个例如:

public class Eagle implements Flyer {

    public void fly() {
        System.out.println("Eagle is soaring");
    }
}

使用接口,我确信即使有不同的实现,fly()方法也会存在。

因此,如果您想要一个具有4个不同接口行为的ABCD类,如接口A,B,C和D中所指定的那样,那么您可以实现:

public class ABCD implements A,B,C,D {

    // methods here
}

通常,我们使用接口来继承行为,使用父/子类来继承模型。

那么我们如何使用Flyer界面?

示例代码:

public class FlyerTest {

    public static void main (String [] args) {
        Flyer flyer = new Eagle();
        flyer.fly();    // Prints out "Eagle is soaring"

        flyer = new Bird();
        flyer.fly();    // Prints out "Bird is flapping"
    }

}

如你所见,只要我有一个传单,我确信“fly”方法将有一个实现。这使我无需怀疑该方法是否确实存在。

这就是我们使用接口来继承行为的原因。

希望您对多重遗传有更好的理解。

为了回答您的核心问题,面向对象的编程有助于促进代码重用。

答案 1 :(得分:1)

由于没有Java中的多重继承,您必须求助于聚合

class ABCD implements InterA, InterB, InterC, InterD
{
   A implA;
   B implB;
   C implC;
   D implD;

   ABCD(A pimplA, B pimplB, C pimplC, D pimplD)
   {
     implA = pimplA;
     implB = pimplB;
     implC = pimplC;
     implD = pimplD;
  }


  // @overidde methods from InterA as return implA ->method();
  // @overidde methods from InterB as return implB ->method();
  // @overidde methods from InterC as return implC ->method();
  // @overidde methods from InterD as return implD ->method();
}

这样你只需要创建A,B,C和D的一些实例,并在ABCD的构造中传递它们。然后 ABCD只需要调用他们的方法

通过这样做,你将重用A,B,C和D的实现

答案 2 :(得分:0)

在java中没有“真正的”多重继承这样的东西。你不能做某事。像public class D extends C,B,A {} 您所能做的就是实现多个接口,或者您可以使B扩展A,C扩展B和D扩展C

答案 3 :(得分:0)

java中没有多重继承。为什么不在ABCD中创建这些类的对象并使用它们来访问这些类的方法?