在这篇文章中,我们将了解 Java 中的继承。它是除抽象、封装和多态之外的 OOP 原则之一。
这个词Inheritance大家再熟悉不过了。通俗地说,这个词的意思是代代相传的财产和特征。例如,父母的财产或特征会传给他们的孩子和后代。
Inheritance
面向对象编程(通常是OOP概念基于现实生活中的示例,其中存在的每个实体都可以表示为一个对象。因此,作为 OOP 中的基本概念之一,Inheritance它基于我们之前讨论的示例——将属性和特征从父母传给他们的孩子。 Java中的继承,源于OOP的概念,定义为子类或对象(称为子类)从其前辈或父类(称为超类)继承行为和属性(方法和变量)的过程)。让我们通过以下部分更深入地研究 Java 中的继承的概念。
Java中的继承是通过使用关键字来实现的extends。这个特殊的词使 Java 编译器明白当前类是继承或扩展另一个类。让我们看一下以下代码片段示例以了解基本语法。
extends
public class B extends A { // some process or variables }
上面的片段显示了extends关键字的使用。在 Java 语言中,“extends”的使用表示类 B 是类 A 的子类或子类,称为超类或父类。继承表示IS-A relationship类之间。这里,B 是 A 的子类或子类。
IS-A relationship
旁边给出的图片显示了 Java 中继承的简单表示。 这里,Parent 类包含一个整数变量a,是 Child 类的超类,Child 类包含一个整数变量b 。让我们通过代码示例来看看这张图片的表示。
a
b
class Parent { int a = 5; } class Child extends Parent { int b= 7; public static void main(String args[]){ Child c = new Child(); System.out.println(“Value of A =”+c.a); System.out.println(“Value of B =”+c.b); System.out.println(“Sum=”+(c.a+c.b)); } }
上面的代码片段在执行时提供了以下结果:
Value of A =5 Value of B =7 Sum=12
从上面的示例中,我们看到子类 B 能够访问a类 Parent 的变量并在其自己的类中使用它。因此,我们看到使用继承,子类可以利用其超类中的变量和方法。
在面向对象编程中有多种表示父子关系的形式。Java 在类的基础上支持三种类型的继承。本节将进一步讨论各种继承类型以及如何使用 Java 实现它们。
这是 Java 中最简单的继承形式,是两个类之间简单的一对一关系。上一节已经讨论了单继承的基本示例,其中单个子类继承了其父类的属性。
旁边给出的图片表示类 A(超类)和 B(子类)之间的单一继承 让我们看一个小代码片段作为单一继承的示例。 代码:
class MessageWriter { public void display(){ System.out.println(“You are viewing a method of A”); } } class MessageDisplayer extends MessageWriter { public static void main(String args[]) { B obj=new B(); obj.display(); } }
上面的代码片段执行以产生以下输出:
You are viewing a method of A
Multi-Level Inheritance顾名思义,它看起来更像是一个基于层的结构。旁边给出的图片代表了一个多级继承结构。在多级继承中,每个类仅以多级或多层架构的形式扩展单个类。
Multi-Level Inheritance
例如,从旁边的图中,我们看到类 C 是类 B 的子类,类 B 是类 A 的子类。因此,B 将依次继承类 A 和 C 的属性和行为, 将从两者继承。 让我们看一个代码片段作为多级继承的示例。
class Animal { void eat(){ System.out.println(“Animals eat”); } } class Horse extends Animal { void call(){ System.out.println(“Horses neigh”); } } class Colt extends Horse { void desc(){ System.out.println(“Colts are baby horses”); } } class TestMultiLevel { public static void main(String args[]){ Colt c = new Colt(); c.desc(); c.call(); c.eat(); } }
执行上述代码,得到以下输出:
Colts are baby horses Horses neigh Animals eat
Hierarchical Inheritance是一种继承类型,其中许多子类扩展单个超类。
Hierarchical Inheritance
旁边给出的图片代表了分层继承的一种基本形式。这种继承形式基本上是多个单一继承,其中所有子类都继承自一个超类。这里,类 B 和 C 是类 A 的子类,并继承其属性和行为。 让我们看一个代码片段作为分层继承的示例。 代码:
class Animal { void eat(){ System.out.println(“Animals eat”); } } class Lion extends Animal { void call(){ System.out.println(“Lions roar”); } } class Wolf extends Animal { void call(){ System.out.println(“Wolves howl”); } } class TestHierarchy{ public static void main(String args[]){ Wolf w = new Wolf(); Lion l=new Lion(); w.call(); w.eat(); l.call(); l.eat(); } }
上面的代码在执行时会产生以下输出:
Wolves howl Animals eat Lions roar Animals eat
Multiple Inheritance是面向对象编程中的一种继承类型,其中单个子类扩展多个超类。混合继承是一种混合形式的继承,包括多级继承和多级继承。Java不支持多重继承。
Multiple Inheritance
上图显示了多重继承
这张图片描述了混合继承。
为了减少复杂性和歧义,Java 不允许使用类进行多重继承。让我们用一个例子来解释歧义。 比如说,有一个类 A 有一个方法display(),而类 B 有另一个方法display()。第三个类 C,扩展了 A 和 B,并且根据 的概念inheritance,能够访问 A 和 B 的 display() 方法。现在,当创建 C 的对象并调用该display()方法时,编译器将不会能够辨别调用哪个显示方法,因为 A 类和 B 类都有同名的方法并由 C 类扩展。
display()
inheritance
代码:
Class A (){ public void display () { //some code } } class B (){ public void display () { //some code } } class C extends A,B () ( Not supported in Java ){ public static void main (){ C obj = new C (); obj.display(); ( Ambiguity between display() of class A and display of class B) } }
为了防止这种歧义,Java 不允许类之间的多重继承,并在尝试多重继承时抛出编译时错误。 注意:然而,Java 使用Interfaces来模拟多重继承。
Inheritance是 Java 的强大武器,有助于使其成为一种广泛接受的语言。它有助于减少代码重复并减少错误。使用在父类中编写的代码,您不再需要为具有相同属性的多个子类编写相同的代码。通过这种方式,java中的继承实现了代码的可重用性,以确保用户更好的可访问性。
这就是java中的继承
原文链接:https://codingdict.com/