教妹学Java(二十八):Java 继承的类型

简介: 教妹学Java(二十八):Java 继承的类型

三妹开学了,学的计算机软件编程。她学校离我家很近,坐公交车也就 10 站路的距离, 每逢周末她都会来找我,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,再加上父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,今天我们要学习的内容是‘继承’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。继承是 Java 中的一种机制。 ”我面带着朴实无华的微笑回答着她,“可以让子类继承到父类的状态和行为,是面向对象编程语言一个重要的部分。”


“继承背后的思想是,你可以在已有类的基础上新建一个类,新类就可以重用基类的方法和字段。当然了,新类中也可以添加属于自己的方法和字段。”


“继承反映了一种‘is-a’的关系,也就是所谓的父子关系。”


----正儿八经的分割线,正文开始------------


01、为什么要在 Java 中使用继承


继承的好处有两点:


通过方法的重写可以实现运行时多态;

提高代码的可重用性。

来了解一下继承方面的术语:


子类:子类是指继承了别的类的类,有时也叫派生类、扩展类;

父类:父类是指子类继承的类,有时也叫超类、基类;

可重用性:顾名思义,可重用性是一种机制,可以在创建新类的时候方便重用现有类中已经定义好的方法和字段。

继承的语法如下所示:


class Subclass-name extends Superclass-name  

{  

  // 方法和字段

}  


extends 关键字表明子类 Subclass 正在继承父类 Superclass,extends 的意思就是扩展,子类除了可以继承父类的资产(字段和方法),也可以新增父类中没有的字段和方法。


/**

* @author 微信搜「沉默王二」,回复关键字 PDF

*/

class Employee {

   float salary = 40000;

}


class Programmer extends Employee {

   int bonus = 10000;


   public static void main(String args[]) {

       Programmer p = new Programmer();

     

       System.out.println("程序员的薪水是 " + p.salary);

       System.out.println("程序员的奖金是:" + p.bonus);

   }

}  


程序员(Programmer)是一个雇员(Employee),它继承了父类的薪水(salary),又新增了奖金(bonus)。


02、 Java 中的继承有哪些类型


继承可以分为单继承、多重继承、不同类继承同一个类、多继承。文字上可能不太直观,我画了四幅图,来看一下。

image.png

image.png

image.png

image.png




四幅图看完后,是不是瞬间就清楚多了?那再来结合代码看一看,就更清楚明了了。


1)单继承


/**

* @author 微信搜「沉默王二」,回复关键字 PDF

*/


class Animal {

   void eat() {

       System.out.println("吃...");

   }

}


class Dog extends Animal {

   void bark() {

       System.out.println("叫唤...");

   }

}


class SingleInheritanceDemo {

   public static void main(String[] args) {

       Dog d = new Dog();

       d.bark();

       d.eat();

   }

}


在上面的例子中,Dog 继承了 Animal,所以 dog 除了 bark(),还可以 eat()。


2)多重继承


/**

* @author 微信搜「沉默王二」,回复关键字 PDF

*/


class Animal1 {

   void eat() {

       System.out.println("吃...");

   }

}


class Dog extends Animal {

   void bark() {

       System.out.println("叫唤...");

   }

}


class BabyDog extends Dog {

   void weep() {

       System.out.println("嗷嗷地哭...");

   }

}


class MultilevelInheritanceDemo {

   public static void main(String[] args) {

       BabyDog d = new BabyDog();

       d.weep();

       d.bark();

       d.eat();

   }

}


BabyDog 继承了 Dog,Dog 继承了 Animal,所以 BabyDog 不仅可以 weep(),还可以 bark() 和 eat()。


3)不同类继承同一个类


/**

* @author 微信搜「沉默王二」,回复关键字 PDF

*/


class Animal {

   void eat() {

       System.out.println("吃...");

   }

}


class Dog extends Animal {

   void bark() {

       System.out.println("汪汪汪...");

   }

}


class Cat extends Animal {

   void meow() {

       System.out.println("喵喵喵...");

   }

}


public class HierarchicalInheritanceDemo {

   public static void main(String[] args) {

       Cat c = new Cat();

       c.meow();

       c.eat();


       Dog d = new Dog();

       d.bark();

       d.eat();

   }

}



Cat 继承了 Animal,Dog 继承了 Animal,所以 cat 和 dog 都可以 eat()。


“二哥,为什么 Java 不支持多继承呢?”三妹问了一个面试官都喜欢问的问题。


“是这样啊,三妹。”这问题一点也难不倒我。“为了降低复杂性和简化语言,Java 不支持多继承。”


“考虑这样一个场景,其中 A、B、C 是三个类,C 类继承了 A 类和 B 类,如果 A 类和 B 类具有相同的方法,子类对象想调用这个方法,那究竟是该调用 A 类的方法还是 B 类的方法呢?”




03、ending


“三妹,关于 Java 中的继承,我们就学到这里吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的双眼,疲惫地给三妹说。


“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。


相关文章
|
2月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
5天前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
9天前
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
23 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
20天前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
22 9
Java——类与对象(继承和多态)
|
1天前
|
存储 安全 Java
Java 数据结构类型总结
在 Java 中,常用的数据结构包括基础数据结构(如数组和字符串)、集合框架(如 Set、List 和 Map 接口的多种实现)、特殊数据结构(如栈、队列和双端队列)、链表(单链表、双链表和循环链表)以及图和树等。这些数据结构各有特点和适用场景,选择时需考虑性能、内存和操作需求。集合框架提供了丰富的接口和类,便于处理对象集合。
|
9天前
|
Java
java基础(10)数据类型中的整数类型
Java中的整数类型包括byte、short、int和long。整数字面值默认为int类型,加L表示long类型。整数字面值可以是十进制、八进制(0开头)或十六进制(0x开头)。小容量类型(如int)可自动转换为大容量类型(如long),但大容量转小容量需强制转换,可能导致精度损失。
21 2
|
8天前
|
Java
Java 的继承
在一个森林中,各种动物共存,如狗和猫。为了管理和组织这些动物,我们采用面向对象的方法设计模型。首先创建 `Animal` 超类,包含 `name` 和 `age` 属性及 `makeSound()` 和 `displayInfo()` 方法。接着,通过继承 `Animal` 创建子类 `Dog` 和 `Cat`,重写 `makeSound()` 方法以发出不同的声音。实例化这些子类并使用它们,展示了继承带来的代码重用、扩展性和多态性等优点。这种方式不仅简化了代码,还体现了现实世界的层次结构。
|
12天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
2月前
|
Java C++
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
这篇文章讨论了Java单继承的设计原因,指出Java不支持多继承主要是为了避免方法名冲突等混淆问题,尽管Java类不能直接继承多个父类,但可以通过接口和继承链实现类似多继承的效果。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
|
2月前
|
Java
【Java基础面试五】、 int类型的数据范围是多少?
这篇文章回答了Java中`int`类型数据的范围是-2^31到2^31-1,并提供了其他基本数据类型的内存占用和数值范围信息。
【Java基础面试五】、 int类型的数据范围是多少?
下一篇
无影云桌面