我们如何证明java不支持多重继承?
是否有任何替代方法可以在Java中实现多重继承?
答案 0 :(得分:6)
我们怎样才能证明java不支持多重继承?
在相同的包中创建3个类,让我们说Test1
,Test2
和Test3
。试试这个。您将收到错误:
public class Test extends Test2, Test3
{
public static void main(String[] a)
{
// ...
}
}
是否有任何替代方法可以在Java中实现多重继承
是的,您可以让您的班级实现多个(1个或多个)接口。
答案 1 :(得分:4)
java中有 no multiple inheritance ,因为它是由语言规范指定的。
要证明它只是尝试扩展2个不相关的类:
public class MyClass extends Number, AbstractList {
}
这将导致编译错误。
你可以做一件事:
多重继承
java中没有多重继承。 正确,除非我们可以将每种类型转换为彼此,如果我们想要的话。
long intClassAddress = normalize(getUnsafe().getInt(new Integer(0), 4L));
long strClassAddress = normalize(getUnsafe().getInt("", 4L));
getUnsafe().putAddress(intClassAddress + 36, strClassAddress);
此代码段将
String
类添加到Integer
个超类,因此我们可以在没有运行时异常的情况下进行转换。
(String) (Object) (new Integer(666))
我真的 不推荐 这个。如果你想要一些类似于多重继承的东西,或者其他人指出你也可以使用组合和委托,那么它被认为是实现多个接口的“最佳实践”。 p>
答案 2 :(得分:3)
是否有任何替代方法可以在Java中实现多重继承
根据您的需要,您可以使用
获得几乎相同的效果实施多个接口
使用对象组合和委托方法调用实现您原本继承的片段的对象
答案 3 :(得分:2)
Java不支持多重继承,但在Java中,您可以使用称为“接口”的不太复杂的功能来实现多重继承。
答案 4 :(得分:1)
如果一个类直接从两个或多个类继承,那么它将是多个继承。但在java中这是不允许的。
我们不需要在java语言规范中指定的证明。
但是如果你需要一个证明,请尝试在下面编译(这不会编译)
class A{
void doSomething(){
System.out.println(“from class A”);
}
}
class B{
void doSomething(){
System.out.println(“from class B”);
}
}
class C extends A,B{
public static void main(String arr[]){
C cob= new C();
cob.doSomething();//now how does compiler knows which super method to call?
}
}
Java的创建者选择不允许多重继承的原因是它可能变得非常混乱。但实际上你可以拥有这样的东西。
public interface InterfaceA {
public void doSomething();
}
public interface InterfaceB {
public void doSomething();
}
public interface InterfaceC extends InterfaceA, InterfaceB {
//same method is declared in InterfaceA and InterfaceB both
public void doSomething();
}
答案 5 :(得分:0)
class A
{
public void methodAClassA()
{
System.out.println("In ClassA MethodA");
}
}
class B extends A{
public void methodAClassA(){
System.out.print("in Class B Method ClassA");
}
}
class C extends A,B {}
这是不可能的,因为 如果你使用上面的代码编译器没有 知道在C类中可以使用哪种实例方法 因此他们将其视为错误,它将显示编译错误。