繁体   English   中英

了解多重继承和接口

[英]To understand Multiple inheritance and interfaces

我在某种程度上了解多重继承和接口。 是否可以使用多重继承来达到我的要求?

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

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

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

例如:

public interface Flyer {

    public void fly();
}

上面的接口可确保任何实现Flyer接口的Java类都将具有fly方法的实现,而不管Flight是如何实现的。

例如:

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个不同接口(如接口A,B,C和D中指定)的行为的ABCD类,则可以实现:

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"
    }

}

如您所见,只要我有一个Flyer,就可以确信“ fly”方法将具有实现。 这使我无需怀疑该方法是否确实存在。

这就是为什么我们使用接口来继承行为。

希望您对多重继承有更好的了解。

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

由于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的实现

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM