1

我正在学习继承,但我不太了解多重继承的部分。

这是我的问题:

如果我创建三个类名:

A级

B类

C类

A类是否可以从C类继承,B类也可以从C类继承它是否会产生多重继承,因为Java中允许从一个C类继承两个类(A,B) ?

基本上这是我的问题:是否可以只从一个类继承一次,这意味着不能有两个不同的类从同一个类继承?

谢谢你。

4

9 回答 9

2

这不是您描述的多重继承。可以将其描述为反向多重继承。多重继承意味着一个类,比如从和A继承特性。BC

我认为没有理由只允许一个从父类继承的类。可以使用final关键字来声明不能派生任何子类。

于 2013-10-11T12:10:47.747 回答
2

你在倒数第二段中所描述的

A类是否可以从C类继承,B类也可以从C类继承它是否会产生多重继承,因为Java中允许从一个C类继承两个类(A,B)?

不叫“多重继承”,只是Class C两个子类。正如其他答案已经说明的那样,多重继承的概念是一个类扩展两个或更多类。因此,实际上,例如,这可能意味着类似class A extends B, C等。在大多数面向对象的语言(如 Java)中,这是不可能的。某些语言(例如 C++)确实允许这样做。

于 2013-10-11T12:14:16.393 回答
2

例如,Javaclass A extends B extends C支持多重继承

Multiple inheritance is where we inherit the properties and behavior of multiple classes    
to a single class. C++, Common Lisp, are some popular languages that support multiple   
inheritance.

在Java中,一个接口可以扩展多个接口,有人认为这意味着Java可以支持多重继承。这不是真的!。扩展多个接口不是多重继承,因为继承的属性和行为将来自单个实现类。永远不会有歧义。

多重继承导致钻石问题钻石问题在Java 中不存在,因为多重继承是不可能的。

于 2013-10-11T12:12:51.803 回答
1

class a extends b extends cjava中不允许的多重继承方式

java为什么不提供多重继承的附加信息

由于重写的概念,Java 不支持多重继承。我们有“致命的死亡钻石”的概念。即,因为我们在 Java 中有一个压倒一切的概念。我们知道什么是覆盖,包括参数返回类型的方法名称应该相同。如果 java 中提供了多重继承。例如:A<- B, A-

这就是为什么我们在java中没有多重继承的原因。 资源

于 2013-10-11T12:08:12.297 回答
1

多重继承是指一个类直接继承自两个或多个其他类。例如,您不能让 A 类同时扩展 B 和 C。多个类都可以扩展您描述的同一个类。这只是单一继承的多个实例。

于 2013-10-11T12:08:59.473 回答
1

多重继承是从类 A 扩展类 B 和 C。

在java中没有多重继承,但你可以实现任何你想要的接口,但只能扩展一个类。

public interface InterfaceA{

}

public interface InterfaceB{

}

public class classA implements InterfaceA, InterfaceB{

}

public class classB extends classA{

}

Java如何实现多重继承

在java中执行多重继承的过程是使用复合设计模式。

想象一下你有

public interface IPizza{
    void build();
}

public class CheesePizza implements IPizza{
    public void build(){
    }
}

public class BarbPizza implements IPizza{
    public void build(){
    }
}

如果你想实现一个 BarbCheesePizza,我建议使用 Composite 并且每个都有一个实例。

public class BarbCheesePizza implements IPizza{

    private BarbPizza barbPizza;
    private CheesePizza cheesePizza;

    public void build(){
         barbPizza.build();
         cheesePizza.build();
    }
}
于 2013-10-11T12:09:51.107 回答
1

您的基类可以拥有任意数量的孩子。但是,您不能有一个扩展(是)2 个或更多父母的班级。查看钻石继承问题以及如何在 Java 中解决它:http: //www.programmerinterview.com/index.php/java-questions/java-diamond-problem/

于 2013-10-11T12:10:45.253 回答
0

Java 不支持Multiple Inheritance. 在这个child class时候,一个parent class延伸。像这样

公开课 A{

}

公共类 B 扩展类 A{ }

于 2013-10-11T12:23:44.130 回答
0

基本上这是我的问题:是否可以只从一个类继承一次,这意味着不能有两个不同的类从同一个类继承?

不,通常你不能禁用这样做,这是不可用的。

在这种情况下,您可以通过使用final关键字来防止继承,没有人可以继承您的类:

public final class MyClass {
}

但如果你愿意 - 你可以。这不是一个好主意。这是一个非常丑陋的结构:) 但是......

public class MyClass {
    public MyClass() {
        checkSubclass();
    }

    public void checkSubclass() {
        if( !getClass().getName().equals("ALLOWED CLASS NAME THERE") ) {
            throw new RuntimeException("Subclassing not allowed");
        }
    }
}

更好的方法是在包内“隐藏”类,使用私有或默认访问修饰符,并在同一个包中继承它。

于 2013-10-11T12:21:04.910 回答