Types of Inheritance in Java

2025年7月14日 | 阅读 7 分钟

继承面向对象编程中最强大的特性。它允许我们将一个类的属性继承到另一个类中。

继承

继承是一种从现有类派生新类的方法。现有的(旧的)类称为基类超类,或父类。新类称为派生类子类,或子类。它允许我们在一个类(子类)中使用另一个类(父类)的属性和行为。

其属性被继承的类称为父类,继承父类属性的类称为子类。因此,它在父类和子类之间建立了一种称为父子关系或Is-a关系。

假设有两个类,名为FatherChild,我们想在Child类中继承Father类的属性。我们可以使用extends关键字来实现这一点。


Types of Inheritance in Java

继承的类型

Java 支持以下四种类型的继承

Types of Inheritance in Java

单继承

在单继承中,子类仅从一个超类派生。它继承了单个父类的属性和行为。有时也称为简单继承

阅读更多 Java 中的单继承

单继承示例

Types of Inheritance in Java

在上图中,Employee 是父类,Executive 是子类。Executive 类继承了 Employee 类的所有属性。

让我们在 Java 中实现单继承机制。

示例

编译并运行

输出

Total salary credited: 414408.0
Bonus of six months: 18000.0

多层继承

多层继承中,一个类从另一个类派生,而该类又从另一个类派生,称为多层继承。简单来说,我们可以说一个类有多个父类称为多层继承。请注意,类必须在不同的级别。因此,存在一个单一的基类和一个单一的派生类,但有多个中间基类。

阅读更多 Java 中的多层继承

多层继承示例

Types of Inheritance in Java

在上图中,Marks 类继承了 Students 类的成员或方法。Sports 类继承了 Marks 类的成员。因此,Student 类是 Marks 类的父类,Marks 类是 Sports 类的父类。因此,Sports 类除了 Marks 类之外,还隐式继承了 Student 的属性。

让我们在 Java 中实现多层继承机制。

示例

编译并运行

输出

registration number= 9870
marks= 78.0
score= 68.7

层次继承

如果从单个基类派生出多个类,则称为层次继承

阅读更多 Java 中的层次继承

层次继承示例

Types of Inheritance in Java

在上图中,Science、Commerce 和 Arts 类继承了名为 Student 的单个父类。

让我们在 Java 中实现层次继承机制。

示例

编译并运行

输出

The method of the Student class is invoked.
The method of the Student class is invoked.
The method of the Student class is invoked.

混合继承

混合意味着它包含多个。混合继承是两种或多种继承类型的组合。

阅读更多 Java 中的混合继承

混合继承示例

Types of Inheritance in Java

在上图中,GrandFather 是一个超类。Father 类继承了 GrandFather 类的属性。由于 Father 和 GrandFather 代表单继承。此外,Father 类被 Son 和 Daughter 类继承。因此,Father 成为 Son 和 Daughter 的父类。这些类代表层次继承。总的来说,它表示混合继承。

让我们在 Java 中实现混合继承机制。

示例

编译并运行

输出

I am a daughter.

多重继承(不支持)

Java 由于歧义而不支持多重继承。但我们可以使用接口来实现多重继承。

阅读更多 Java 中的多重继承

多重继承示例

示例

上面的代码会产生一个错误,因为编译器无法决定调用哪个 message() 方法。出于这个原因,Java 不支持类级别的多重继承,但可以通过接口来实现。

要记住的重要事项

  • 构造函数在 Java 中不能被继承。
  • 私有成员在 Java 中不会被继承。
  • Java 不允许循环继承。
  • 将父引用分配给子对象。
  • 由于构造函数中的 super(),构造函数会被执行。

继承类型 MCQ

1. 关于混合继承,以下哪个陈述是正确的?

  1. Java 直接支持混合继承。
  2. 混合继承只能使用类来实现。
  3. 混合继承可以通过类和接口的组合来实现。
  4. 混合继承由于歧义会导致编译时错误。
 

答案:3

解释:混合继承涉及组合多种继承类型。虽然 Java 由于歧义不直接支持类级别的混合继承,但可以通过组合类和接口来实现混合继承。


2. 为什么 Java 不直接使用类支持多重继承?

  1. Java 只支持单继承。
  2. 由于歧义的风险和“菱形问题”。
  3. 因为多重继承被认为是一种不良的编程实践。
  4. 因为多重继承可能导致内存使用效率低下。
 

答案:2

解释:Java 避免使用类进行多重继承,以防止歧义和“菱形问题”,即一个类可以继承自两个具有共同基类的类,导致对使用哪个继承的方法或属性感到困惑。


3. 构造函数在 Java 中不被继承的主要原因是什么?

  1. 构造函数被视为私有方法。
  2. 继承的构造函数可能导致安全风险。
  3. 构造函数不被继承,因为每个类负责初始化自己的实例变量。
  4. Java 不支持任何方法的继承。
 

答案:3

解释:构造函数用于初始化类的实例变量,由于每个类在初始化方面可能有不同的需求,因此它们不被继承。相反,子类可以使用 super() 调用父类的构造函数。


4. 在多层继承的上下文中,以下哪个陈述是正确的?

  1. 子类只能直接继承其直接父类。
  2. 子类直接继承层次结构中的所有类。
  3. Java 不允许多层继承。
  4. 子类可以调用其继承层次结构中任何类的`方法`。
 

答案:4

解释:在多层继承中,子类继承自父类,父类又继承自另一个类。子类可以访问其继承层次结构中所有类的`方法`和属性,前提是它们不是私有的。


5. super 关键字在 Java 继承中的作用是什么?

  1. 创建父类的实例。
  2. 调用子类中已覆盖的父类`方法`。
  3. 防止从父类继承。
  4. 在子类中定义新`方法`。
 

答案:2

解释:super 关键字在子类中使用,用于调用其父类的`方法`或构造函数。它特别适用于访问已覆盖的`方法`或初始化父类变量和构造函数。