Java 中的继承(附示例)
什么是继承?
继承是一种机制,其中一个类获取另一个类的属性。例如,孩子继承父母的特征。通过继承,我们可以重用现有类的字段和方法。因此,继承促进了可重用性,是面向对象编程 (OOPs) 的重要概念。
Java 中的继承是什么?
Java 继承是一种机制,其中一个类获取另一个类的属性。在 Java 中,当两个类之间存在“是”关系时,我们使用继承。父类称为超类 (super class),继承的类称为子类 (subclass)。子类使用 `extends` 关键字继承超类的特性。继承很重要,因为它带来了代码的可重用性。
Java 继承语法
class subClass extends superClass { //methods and fields }
Java 中的继承类型
以下是 Java 中继承的不同类型
- 单一继承
- 多重继承
- 多层继承
- 层次继承
- 混合继承
1. 单一继承
在单一继承中,一个类继承另一个类(只有一个类)。
在上图中,B 类只继承 A 类。A 类是超类,B 类是子类。
2. 多重继承
多重继承是 Java 继承类型之一,其中一个类继承多个类。Java 不支持多重继承。
根据上图,C 类同时继承 A 类和 B 类。
3. 多层继承
在多层继承中,一个类可以继承一个派生类。因此,派生类成为新类的基类。
根据图中所示,C 类是 B 的子类,B 是 A 类的子类。
4. 层次继承
在层次继承中,一个类被许多子类继承。
根据以上示例,B、C 和 D 类继承相同的 A 类。
5. 混合继承
混合继承是 Java 继承类型之一,它是单一继承和多重继承的结合。
根据以上示例,A 类中的所有公共和受保护成员通过 B 类首先继承到 D 类,然后通过 C 类再次继承。
注意:Java 不支持混合/多重继承。
Java 继承示例
这是 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 中的继承
考虑来自上一个示例的同一个银行应用程序。
我们需要打开两种不同的账户类型,一种是储蓄账户,另一种是支票账户(也称为活期账户)。
让我们比较和研究如何从结构化和面向对象编程的角度来处理编码。
结构化方法:在结构化编程中,我们将创建两个函数——
- 一个用于提款
- 另一个用于存款操作。
因为这些函数在不同账户中的工作方式相同。
OOP 方法:在使用OOPs 编程方法时。我们将创建两个类。
- 每个类都实现了存款和提款函数。
- 这将导致重复的额外工作。
软件中的更改请求
现在,需求规范中有一个更改,涉及到软件行业中非常普遍的一个功能。您需要添加具有透支功能的特权银行账户。背景是,透支是一种设施,允许您提取比您账户中可用余额更多的金额。
结构化方法:使用函数式方法,我必须修改我的提款函数,该函数已经过测试并已基线化。添加如下方法将处理新需求。
OOP 方法:使用 OOP 方法,您只需编写一个具有独特提款函数实现的类。我们从未触及过经过测试的代码。
另一个更改请求
如果需求进一步更改怎么办?例如,添加带有自己的存款独特要求的信用卡账户。
结构化方法:使用结构化方法,您必须再次更改已测试的存款代码。
OOP 方法:但是,使用面向对象的方法,您将创建一个具有独特存款方法实现的新类(如下面的图像中突出显示的红色部分)。因此,即使结构化编程一开始看起来是一种简单的方法,但从长远来看,OOP 方法更胜一筹。
OOP 中继承的优点
但是有人可能会争辩说,在所有类中,您都有重复的代码片段。
为了克服这一点,您可以创建一个父类,例如“account”,并在其中实现相同的存款和提款函数。然后让子类继承“account”类。这样,它们就可以访问 account 类中的提款和存款函数。这些函数不需要单独实现。这就是Java 中的继承。