我正在学习继承,但我不太了解多重继承的部分。
这是我的问题:
如果我创建三个类名:
A级
B类
C类
A类是否可以从C类继承,B类也可以从C类继承它是否会产生多重继承,因为Java中允许从一个C类继承两个类(A,B) ?
基本上这是我的问题:是否可以只从一个类继承一次,这意味着不能有两个不同的类从同一个类继承?
谢谢你。
我正在学习继承,但我不太了解多重继承的部分。
这是我的问题:
如果我创建三个类名:
A级
B类
C类
A类是否可以从C类继承,B类也可以从C类继承它是否会产生多重继承,因为Java中允许从一个C类继承两个类(A,B) ?
基本上这是我的问题:是否可以只从一个类继承一次,这意味着不能有两个不同的类从同一个类继承?
谢谢你。
这不是您描述的多重继承。可以将其描述为反向多重继承。多重继承意味着一个类,比如从和A
继承特性。B
C
我认为没有理由只允许一个从父类继承的类。可以使用final
关键字来声明不能派生任何子类。
你在倒数第二段中所描述的
A类是否可以从C类继承,B类也可以从C类继承它是否会产生多重继承,因为Java中允许从一个C类继承两个类(A,B)?
不叫“多重继承”,只是有Class C
两个子类。正如其他答案已经说明的那样,多重继承的概念是一个类扩展两个或更多类。因此,实际上,例如,这可能意味着类似class A extends B, C
等。在大多数面向对象的语言(如 Java)中,这是不可能的。某些语言(例如 C++)确实允许这样做。
例如,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 中不存在,因为多重继承是不可能的。
class a extends b extends c
java中不允许的多重继承方式
java为什么不提供多重继承的附加信息
由于重写的概念,Java 不支持多重继承。我们有“致命的死亡钻石”的概念。即,因为我们在 Java 中有一个压倒一切的概念。我们知道什么是覆盖,包括参数返回类型的方法名称应该相同。如果 java 中提供了多重继承。例如:A<- B, A-
这就是为什么我们在java中没有多重继承的原因。 资源
多重继承是指一个类直接继承自两个或多个其他类。例如,您不能让 A 类同时扩展 B 和 C。多个类都可以扩展您描述的同一个类。这只是单一继承的多个实例。
多重继承是从类 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();
}
}
您的基类可以拥有任意数量的孩子。但是,您不能有一个扩展(是)2 个或更多父母的班级。查看钻石继承问题以及如何在 Java 中解决它:http: //www.programmerinterview.com/index.php/java-questions/java-diamond-problem/
Java 不支持Multiple Inheritance
. 在这个child class
时候,一个parent class
延伸。像这样
公开课 A{
}
公共类 B 扩展类 A{ }
基本上这是我的问题:是否可以只从一个类继承一次,这意味着不能有两个不同的类从同一个类继承?
不,通常你不能禁用这样做,这是不可用的。
在这种情况下,您可以通过使用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");
}
}
}
更好的方法是在包内“隐藏”类,使用私有或默认访问修饰符,并在同一个包中继承它。