第三章Java中的继承|
在这篇文章中,我们将了解 Java 中的继承。它是除抽象、封装和多态之外的 OOP 原则之一。
介绍
这个词Inheritance
大家再熟悉不过了。通俗地说,这个词的意思是代代相传的财产和特征。例如,父母的财产或特征会传给他们的孩子和后代。
面向对象编程(通常是OOP概念基于现实生活中的示例,其中存在的每个实体都可以表示为一个对象。因此,作为 OOP 中的基本概念之一,Inheritance
它基于我们之前讨论的示例——将属性和特征从父母传给他们的孩子。 Java中的继承,源于OOP的概念,定义为子类或对象(称为子类)从其前辈或父类(称为超类)继承行为和属性(方法和变量)的过程)。让我们通过以下部分更深入地研究 Java 中的继承的概念。
基本语法
Java中的继承是通过使用关键字来实现的extends
。这个特殊的词使 Java 编译器明白当前类是继承或扩展另一个类。让我们看一下以下代码片段示例以了解基本语法。
public class B extends A {
// some process or variables
}
上面的片段显示了extends
关键字的使用。在 Java 语言中,“extends”的使用表示类 B 是类 A 的子类或子类,称为超类或父类。继承表示IS-A relationship
类之间。这里,B 是 A 的子类或子类。
Java中的继承示例
旁边给出的图片显示了 Java 中继承的简单表示。 这里,Parent 类包含一个整数变量a
,是 Child 类的超类,Child 类包含一个整数变量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 实现它们。
单一继承
这是 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
顾名思义,它看起来更像是一个基于层的结构。旁边给出的图片代表了一个多级继承结构。在多级继承中,每个类仅以多级或多层架构的形式扩展单个类。
例如,从旁边的图中,我们看到类 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
是一种继承类型,其中许多子类扩展单个超类。
旁边给出的图片代表了分层继承的一种基本形式。这种继承形式基本上是多个单一继承,其中所有子类都继承自一个超类。这里,类 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不支持多重继承。
上图显示了多重继承
这张图片描述了混合继承。
为什么Java不支持多重继承?
为了减少复杂性和歧义,Java 不允许使用类进行多重继承。让我们用一个例子来解释歧义。 比如说,有一个类 A 有一个方法display()
,而类 B 有另一个方法display()
。第三个类 C,扩展了 A 和 B,并且根据 的概念inheritance
,能够访问 A 和 B 的 display() 方法。现在,当创建 C 的对象并调用该display()
方法时,编译器将不会能够辨别调用哪个显示方法,因为 A 类和 B 类都有同名的方法并由 C 类扩展。
代码:
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中的继承
相关文章:
- [其它]第六章JavaFutureTask示例|
- [其它]第六章JavaScheduledThreadPoolExecutor示例|
- [其它]第六章使用Callable和Future的JavaExecutorService示例|
- [其它]第六章JavanewCachedThreadPool示例|
- [其它]第六章JavanewFixedThreadPool示例|
- [其它]第五章在java中使用3个线程打印序列|
- [其它]第五章java中notify和notifyAll的区别|
- [其它]第五章我们可以在java中启动一个线程两次吗|
- [其它]第五章java中的对象级锁定与类级锁定|
- [其它]第五章Java线程连接示例|
相关推荐:
- [其它]第三章java中的抽象类|
- [其它]第四章java中的TreeMap与示例|
- [其它]第四章java中的hashcode()和equals()方法|
- [其它]第六章JavaFutureTask示例|
- [其它]计算机组成原理PDF扫描格式电子版百度云网盘下载
- [其它]程序设计语言概念(第9版)[Robert W. Sebesta]pdf格式电子版百度云网盘下载[53.8M]
- [其它]程序员必读之软件架构[Simon Brown]pdf格式电子版百度云网盘下载[41.6M]
- [其它]程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- [其它]程序员的职业素养[Robert C. Martin]pdf格式电子版百度云网盘下载[21.6M]
- [其它]程序员教程(第3版)[张淑平]pdf格式电子版百度云网盘下载[136.5M]
- 计算机组成原理PDF扫描格式电子版百度云网盘下载
- 硅谷之谜[吴军]pdf格式电子版百度云网盘下载[59.5M]
- 自选基金助手,一款Chrome扩展程序
- 七周七语言 理解多种编程范型[Bruce A. Tate]pdf格式电子版百度云网盘下载[9M]
- 系统集成项目管理工程师考试考眼分析与样卷解析(2014版)[软考新大纲研究组]
- 程序员面试金典(第5版)[Gayle Laakmann McDowell]pdf格式电子版百度云网盘下载[81.5M]
- 创业维艰 如何完成比难更难的事[Ben Horowitz]pdf格式电子版百度云网盘下载[65.3
- 程序员的思维修炼 开发认知潜能的九堂课[Andy Hunt]pdf格式电子版百度云网盘下载
- 图灵的秘密 他的生平、思想及论文解读[Charles Petzold]pdf格式电子版百度云网盘下
- OCP OCA认证考试指南全册:Oracle Database 11g(1Z0-051、1Z0-052、1Z0-053)[John Watson]pdf格式