Java 继承(子类和超类)

在 Java 中,可以从一个类继承属性和方法到另一个类。我们将“继承概念”分为两类:

子类(child): 从另一个类继承的类

超类(parent): 被继承的类

要从一个类继承,使用 extends 关键字。

示例:

class Vehicle {
protected String brand = "Ford"; // Vehicle 属性
public void honk() { // Vehicle 方法
System.out.println("Tuut, tuut!");
}
} class Car extends Vehicle {
private String modelName = "Mustang"; // Car 属性
public static void main(String[] args) { // 创建 myCar 对象
Car myCar = new Car(); // 在 myCar 对象上调用 honk() 方法(来自 Vehicle 类)
myCar.honk(); // 显示来自 Vehicle 类的 brand 属性的值和来自 Car 类的 modelName 的值
System.out.println(myCar.brand + " " + myCar.modelName);
}
}

输出:

Tuut, tuut!
Ford Mustang

注意:

  • 在上面的示例中,Vehicle 类是超类,Car 类是子类。
  • Car 类继承了 Vehicle 类的 brand 属性和 honk() 方法。
  • Car 类还可以添加自己的属性和方法,例如 modelName。

何时使用继承:

  • 代码重用:在创建新类时,重用现有类的属性和方法。
  • 代码的组织:将相关的类组织在一起,使其更容易理解和维护。

final 关键字:

如果不想让其他类从一个类继承,可以使用 final 关键字。

示例:

final class Vehicle {
...
} class Car extends Vehicle {
...
}

输出:

Main.java:9: error: cannot inherit from final Vehicle
class Main extends Vehicle {
^
1 error

一些额外的说明:

  • 一个类只能有一个超类。
  • 子类可以访问超类的所有非私有成员(属性和方法)。
  • 子类可以覆盖超类的方法,以提供不同的实现。
  • 子类可以扩展超类的功能,添加新的属性和方法。

Java 多态

多态 意味着“多种形式”,它发生在我们有许多通过继承相互关联的类时。

继承允许我们从另一个类继承属性和方法。多态使用这些方法执行不同的任务。这使我们能够以不同的方式执行单个操作。

示例:

假设有一个名为 Animal 的超类,它具有一个名为 animalSound() 的方法。Animal 的子类可以是 Pig、Cat、Dog、Bird - 它们也有它们自己的实现动物声音的方法(猪发出哼哼声,猫发出喵喵声等):

class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
} class Pig extends Animal {
public void animalSound() {
System.out.println("The pig says: wee wee");
}
} class Dog extends Animal {
public void animalSound() {
System.out.println("The dog says: bow wow");
}
}

现在我们可以创建 Pig 和 Dog 对象,并在它们两者上调用 animalSound() 方法:

class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
} class Pig extends Animal {
public void animalSound() {
System.out.println("The pig says: wee wee");
}
} class Dog extends Animal {
public void animalSound() {
System.out.println("The dog says: bow wow");
}
} class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // 创建 Animal 对象
Animal myPig = new Pig(); // 创建 Pig 对象
Animal myDog = new Dog(); // 创建 Dog 对象
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}

输出:

The animal makes a sound
The pig says: wee wee
The dog says: bow wow

何时以及为何使用“继承”和“多态”?

  • 代码重用: 在创建新类时,重用现有类的属性和方法。
  • 代码的组织: 将相关的类组织在一起,使其更容易理解和维护。
  • 灵活性: 允许代码以不同的方式执行,而无需更改代码本身。

多态的优点:

  • 代码更简洁:只需要编写一次代码,就可以在不同的类上使用。
  • 代码更易于维护:如果需要更改代码,只需更改一次,所有使用它的类都会自动更新。
  • 代码更易于扩展:可以轻松添加新的类,而无需更改现有的代码。

一些额外的说明:

  • 多态是面向对象编程的重要概念之一。
  • 多态可以使代码更简洁、更易于维护和扩展。
  • 抽象类和接口是实现多态的重要工具。

一些额外的思考:

  • 您可以想象其他可以利用多态的示例吗?
  • 多态在现实世界中有哪些应用?

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Java 继承与多态:代码重用与灵活性的巧妙结合的更多相关文章

  1. Java 继承和多态

                                                        Java  继承和多态 Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因 ...

  2. Java 继承、多态与类的复用

    摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了 ...

  3. Java继承和多态实例

    我们知道面向对象的三大特性是封装.继承和多态.然而我们有时候总是搞不清楚这些概念.下面对这些概念进行整理, 为以后面向抽象的编程打下坚实的基础. 封装的概念还是很容易理解的.如果你会定义类,那么相信你 ...

  4. Java继承与多态

    感慨一下,到了现在感觉Java里面很多东西都是模模糊糊,不能这样了,一点点解决吧.今天看了继承与多态的一些内容,感觉看得很浅,先写下来,算是巩固,如果后面看到更好的内容,再慢慢加上去. 继承与多态,他 ...

  5. Java继承,多态,组合应用

    继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把supe ...

  6. java继承和多态

    父类和子类 如果类C1扩展自另一个类C2,那么C1称为子类或派生类,C2称为父类或基类.派生类可以从它的基类中继承可访问的数据域和方法,还可添加新数据域和新方法 例如:实现一个几何图形基类; clas ...

  7. 四. Java继承和多态8.Java final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...

  8. 四. Java继承和多态4. 多态和动态绑定

    在Java中,父类的变量可以引用父类的实例,也可以引用子类的实例. 请读者先看一段代码: public class Demo { public static void main(String[] ar ...

  9. 四. Java继承和多态10. Java Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  10. 四. Java继承和多态6. 多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...

随机推荐

  1. rpa使用自带数据抓取方式抓取页面元素

    大家好,我是一方. 今天我们一起看一下如何使用rpa自带的功能来抓取自己想要的页面元素,这里我们以抖音为例来抓取某个领域的作者列表. 想要获取页面元素,大概的流程为:确定页面元素.分析页面元素.使用自 ...

  2. 压测中TPS上不去的几种原因及分析?

    1. 服务器资源限制:服务器的硬件资源(如 CPU.内存.磁盘)可能不足以处理大量的请求.在高负载情况下,服务器可能无法及时响应所有的请求,导致 TPS 上不去.解决方法可以考虑升级硬件资源或通过负载 ...

  3. 十四: Mysql数据结构选择的合理性

    Mysql数据结构选择的合理性 从MySQL的角度讲,不得不考虑一个现实问题就是磁盘I/O. 如果我们能让索引的数据结构尽量减少硬盘的I/O操作,所消耗的时间也就越小.可以说,磁盘的I/O操作次数对索 ...

  4. 2.Canal连接MQ

    1. 配置文件介绍 Canal的启动,是以创建实例(instance)的方式,每个实例都有自己单独的工作环境, 而配置也分成两个部分 canal.properties (系统根配置文件) instan ...

  5. String对象和String常量池

    1. String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "mogublog" ; // 字面量的定义方式 Str ...

  6. Java 基本数据类型之间的运算规则

    1 /*** 2 * 基本数据类型之间的运算规则 3 * 4 * 前提:7中基本数据类型运算 5 * 6 * 1.自动类型提升: 7 * 当容量小的类型与容量大的数据类型的变量做运算时,结果自动提升为 ...

  7. C++ //deque容器 构造函数 //deque赋值操作 //deque大小操作 //重新指定大小 //deque没有容量概念 //deque插入和删除 //deque 容器数据存取 ////deque 排序 sotr算法

    1 //deque容器 构造函数 //deque赋值操作 //deque大小操作 //重新指定大小 2 //deque没有容量概念 //deque插入和删除 //deque 容器数据存取 3 //// ...

  8. 继续总结Python中那些简单好用的用法

    上一篇文章Python中那些简单又好用的特性和用法发出后,群里的小伙伴又给补充了几个好用的用法,结合生产实用经验汇总整理如下,各位看官如有需要请自取 反射,反射是一种机制,可以在运行时获取.检查和修改 ...

  9. openlayers.org 百度地图 静态化 同类产品

    openlayers 官网 https://openlayers.org/ 发现不好打开,修改dns 114.114.114.114 202.99.104.68 打开快了许多 https://blog ...

  10. 基于泰凌微2.4G私有协议TLSR8359的遥控器解决方案之源码解析

    一 2.4G私有协议 在无线遥控和远距离无线通信领域,2.4G私有协议有着天然的优势.成本低,发射功率大,功耗低.这让它在远距离无线遥控飞机,遥控车等领域有着广泛的应用.基于TLSR8359市场上广泛 ...