我理解一个范围的多重继承和接口。是否可以使用多重继承来实现我的要求?
我有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做到这一点?
答案 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中创建这些类的对象并使用它们来访问这些类的方法?