Java 中的继承(附示例)

什么是继承?

继承是一种机制,其中一个类获取另一个类的属性。例如,孩子继承父母的特征。通过继承,我们可以重用现有类的字段和方法。因此,继承促进了可重用性,是面向对象编程 (OOPs) 的重要概念。

Java 中的继承是什么?

Java 继承是一种机制,其中一个类获取另一个类的属性。在 Java 中,当两个类之间存在“是”关系时,我们使用继承。父类称为超类 (super class),继承的类称为子类 (subclass)。子类使用 `extends` 关键字继承超类的特性。继承很重要,因为它带来了代码的可重用性。

Java 继承语法

class subClass extends superClass  
{  
   //methods and fields  
} 

Java 中的继承类型

以下是 Java 中继承的不同类型

  1. 单一继承
  2. 多重继承
  3. 多层继承
  4. 层次继承
  5. 混合继承

1. 单一继承

在单一继承中,一个类继承另一个类(只有一个类)。

Single Inheritance in Java
单一继承

在上图中,B 类只继承 A 类。A 类是超类,B 类是子类。

2. 多重继承

多重继承是 Java 继承类型之一,其中一个类继承多个类。Java 不支持多重继承。

Multiple Inheritance in Java
Java 多重继承

根据上图,C 类同时继承 A 类和 B 类。

3. 多层继承

在多层继承中,一个类可以继承一个派生类。因此,派生类成为新类的基类。

Multilevel Inheritance in Java
多层继承

根据图中所示,C 类是 B 的子类,B 是 A 类的子类。

4. 层次继承

在层次继承中,一个类被许多子类继承。


Hierarchical Inheritance in Java
层次继承

根据以上示例,B、C 和 D 类继承相同的 A 类。

5. 混合继承

混合继承是 Java 继承类型之一,它是单一继承和多重继承的结合。


Hybrid Inheritance
混合继承

根据以上示例,A 类中的所有公共和受保护成员通过 B 类首先继承到 D 类,然后通过 C 类再次继承。

注意:Java 不支持混合/多重继承。

Java 继承示例

这是 Java 继承的一个示例


Example of Java Inheritance
Java 继承示例

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Super 关键字

super 关键字类似于 “this” 关键字。super 关键字可用于访问父类的任何数据成员或方法。Super 关键字可用于变量、方法和构造函数级别。

语法

super.<method-name>();

另请参阅:Java 中的 this 关键字:是什么以及如何使用(附带示例)

通过示例学习 OOP 中的继承

考虑来自上一个示例的同一个银行应用程序。

我们需要打开两种不同的账户类型,一种是储蓄账户,另一种是支票账户(也称为活期账户)。

Inheritance in OOP

让我们比较和研究如何从结构化和面向对象编程的角度来处理编码。

结构化方法:在结构化编程中,我们将创建两个函数——

  1. 一个用于提款
  2. 另一个用于存款操作。

因为这些函数在不同账户中的工作方式相同。

Inheritance in OOP's

OOP 方法:在使用OOPs 编程方法时。我们将创建两个类。

  • 每个类都实现了存款和提款函数。
  • 这将导致重复的额外工作。

Inheritance in OOP's

软件中的更改请求

现在,需求规范中有一个更改,涉及到软件行业中非常普遍的一个功能。您需要添加具有透支功能的特权银行账户。背景是,透支是一种设施,允许您提取比您账户中可用余额更多的金额。

Change Request in Software

结构化方法:使用函数式方法,我必须修改我的提款函数,该函数已经过测试并已基线化。添加如下方法将处理新需求。

Change Request in Software

OOP 方法:使用 OOP 方法,您只需编写一个具有独特提款函数实现的类。我们从未触及过经过测试的代码。

Change Request in Software

另一个更改请求

如果需求进一步更改怎么办?例如,添加带有自己的存款独特要求的信用卡账户

Multiple Change Request in Software requirement

结构化方法:使用结构化方法,您必须再次更改已测试的存款代码。

Structural approach to Multiple Change Request in Software

OOP 方法:但是,使用面向对象的方法,您将创建一个具有独特存款方法实现的新类(如下面的图像中突出显示的红色部分)。因此,即使结构化编程一开始看起来是一种简单的方法,但从长远来看,OOP 方法更胜一筹。

OOP's approach to Multiple Change Request

OOP 中继承的优点

但是有人可能会争辩说,在所有类中,您都有重复的代码片段。

为了克服这一点,您可以创建一个父类,例如“account”,并在其中实现相同的存款和提款函数。然后让子类继承“account”类。这样,它们就可以访问 account 类中的提款和存款函数。这些函数不需要单独实现。这就是Java 中的继承。

Advantages of Inheritance in OOPs

Advantages of Inheritance in OOPs