Java 和多重继承
在 Java 中,我们使用继承来创建类和对象的层次分类。顾名思义,继承是类继承另一个类的成员的能力。继承其属性的类称为超类,而继承超类的类称为子类。我们使用 extends 关键字来继承该类。Java 中有几种类型的继承,例如单级和多级。在本文中,我们将专门探讨多重继承。
Java 中的多重继承
在面向对象编程的术语中,多重继承是指单个子类继承多个超类的能力。与其他面向对象编程语言不同,Java 不支持类的多重继承,而是允许接口的多重继承。
多重继承的可视化表示 −

为什么 Java 不支持类的多重继承?
用一行来回答这个问题,是为了防止歧义。在上图中,我们可以看到类 C 同时扩展了类 A 和类 B。假设两个类都有相同的方法 display()。在这种情况下,Java 编译器将无法决定应该调用哪个 display 方法。因此,为了防止这种歧义,Java 限制了类的多重继承。钻石问题就是这种歧义的一个示例。
示例
以下示例说明了如果尝试类的多重继承将会产生什么结果。
class Event { // 第一个超类
public void start() {
System.out.println("Start Event");
}
}
class Sports { // 第二个超类
public void play() {
System.out.println("Play Sports.");
}
}
// 子类扩展两个超类
class Hockey extends Sports, Event {
public void show() {
System.out.println("Show Hockey.");
}
}
public class Tester{
public static void main(String[] args) {
// 创建子类的实例
Hockey hockey = new Hockey();
// 调用子类的方法
hockey.show();
}
}
输出
Tester.java:12: error: '{' expected
class Hockey extends Sports, Event {
^
1 error
错误表明,即使使用不同的方法,Java 也不支持类的多重继承。
为什么 Java 支持接口的多重继承?
在 Java 中,接口有两个用途:纯抽象和多重继承。通常,接口由抽象方法和变量组成,这些方法和变量定义类可以实现的行为。在这里,抽象方法是没有任何实现或主体的方法,使用 abstract 关键字声明。
由于抽象方法的这一特性,Java 允许接口的多重继承。抽象方法不包含任何定义,如果我们想使用它,我们需要在子类中定义它。这样,该方法就只有一个定义,我们可以轻松实现多重继承。
要创建接口,我们使用关键字"interface",要在类中访问其成员,我们需要在定义该类时使用"implements"关键字。
语法
interface nameOfInterface {
method1();
method2();
}
示例
以下示例说明了使用接口实现多重继承的实际方法。
interface Event { // interface 1
public void start();
}
interface Sports { // interface 2
public void play();
}
// another interface extending 1st and 2nd interface
interface Hockey extends Sports, Event{
public void show();
}
public class Tester{
public static void main(String[] args){
// creating instance of hockey
Hockey hockey = new Hockey() {
// 实现接口的方法
public void start() {
System.out.println("Start Event");
}
public void play() {
System.out.println("Play Sports");
}
public void show() {
System.out.println("Show Hockey");
}
};
// 使用实例调用方法
hockey.start();
hockey.play();
hockey.show();
}
}
输出
Start Event Play Sports Show Hockey
示例
在此示例中,我们将声明两个具有相同名称但不同签名的方法的接口,然后尝试实现多重继承。
interface Message1 { // 接口 1
public void method();
}
interface Message2 { // 接口 2
public void method(int id);
}
public class IntrfExample3 implements Message1, Message2 {
// 在这里使用具有不同定义的方法
public void method() {
System.out.println("Tutorialspoint");
}
public void method(int id) {
System.out.println("ID: " + id);
}
public static void main(String []args){
// 对象创建
IntrfExample3 exp = new IntrfExample3();
// 方法调用
exp.method();
exp.method(125);
}
}
输出
Tutorialspoint ID: 125
结论
我们从定义继承开始本文,在下一节中,我们讨论了多重继承,这是一种继承类型,其中一个子类扩展了两个或两个以上超类的属性。通常,Java 不支持类的多重继承,但我们可以使用接口代替类来实现相同的目的。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

