Java的“多重继承”
接口只是比抽象类“更纯”的一种形式。它的用途并不止那些。由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起。这一点是至关重要的,因为我们经常都需要表达这样一个意思:“x从属于a,也从属于b,也从属于c”。在C++中,将多个类合并到一起的行动称作“多重继承”,而且操作较为不便,因为每个类都可能有一套自己的实施细节。在Java中,我们可采取同样的行动,但只有其中一个类拥有具体的实施细节。所以在合并多个接口的时候,C++的问题不会在Java中重演。
在一个衍生类中,我们并不一定要拥有一个抽象或具体(没有抽象方法)的基础类。如果确实想从一个非接口继承,那么只能从一个继承。剩余的所有基本元素都必须是“接口”。我们将所有接口名置于implements关键字的后面,并用逗号分隔它们。可根据需要使用多个接口,而且每个接口都会成为一个独立的类型,可对其进行上溯造型。
接口只是比抽象类“更纯”的一种形式。它的用途并不止那些。由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起。这一点是至关重要的,因为我们经常都需要表达这样一个意思:“x从属于a,也从属于b,也从属于c”。在C++中,将多个类合并到一起的行动称作“多重继承”,而且操作较为不便,因为每个类都可能有一套自己的实施细节。在Java中,我们可采取同样的行动,但只有其中一个类拥有具体的实施细节。所以在合并多个接口的时候,C++的问题不会在Java中重演。
在一个衍生类中,我们并不一定要拥有一个抽象或具体(没有抽象方法)的基础类。如果确实想从一个非接口继承,那么只能从一个继承。剩余的所有基本元素都必须是“接口”。我们将所有接口名置于implements关键字的后面,并用逗号分隔它们。可根据需要使用多个接口,而且每个接口都会成为一个独立的类型,可对其进行上溯造型。
C++中,有类A、B,如果类C继承了A和B,那么就可以直接用C调用A或者B中实现了的方法。
能否举个例子?
这是语言设计时已经考虑的问题。java不打算实现这样的东西。
interface是一个很不错的东东,他可以帮助你设计一个层次结构跟简单的framework在设计时适当的使用interface&abtract class会使其结构优美,灵活,适应性好。(可以参看design parten)
使用接口几乎可以实现任何c++中能够实现的结构。在多重继承时要多考虑一下时不是值得该使用什么样的方式,不要盲目使用多继承
你所说的那种情况在java中是完全可以实现的,但是干吗要那样呢,
(
interface B{
void fly();
}
class C {
void swim(){System.out.print("Swiming");};
}
class A extends C implements B{
void fly(){System.out.print("fly");}
}public class MutilExtends extends A{})bless U!!!
非常感谢,你解开了我心中的疑惑!也谢谢其他几位。
分不多,略表心意!