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. EXE程序缺DLL怎么办

    起因 工程师发给用户一个VS编译的windows应用程序,客户反应打不开,报缺少dll.可是dll明明就在当前目录啊,为什么还会报错呢? 那应该是该DLL依赖的其它DLL不存在导致的,用depends ...

  2. 【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息

    问题描述 在Spring Boot应用中集成Event Hub,发送消息时指定Partition Key,日志中发现异常: 应用使用Event Hub版本为 <dependency> &l ...

  3. STM32SPIFLASH读写

    STM32SPIFLASH读写 1.1 SPI注意事项 SPI是同步通信,即通信双方每次信息交互必会带有一问一答,这代表在正常的单核MCU(例如STM32)中很难实现软件模拟的双向SPI通信(TFT屏 ...

  4. .NET应用国际化支持-葡萄牙语下如何不区分重音的模糊查询

    葡萄牙语,作为一种罗曼语族的语言,其正字法(orthography)并不使用音标系统来标记发音,而是有一套特定的拼写规则.然而,葡萄牙语中确实使用重音符号(acentos)来标记某些元音的重音(str ...

  5. linux复习基础命令

    Linux基础命令 学习目标 了解vm备份的两种方式 了解快照和克隆的区别 了解linux系统文件 掌握基础命令 指定vmtools的作用 1 vm两种备份方式 为什么要进行备份 保证centos操作 ...

  6. Java 多线程------多线程的创建,方式一:继承于Thread类

    1 package com.bytezero.thread; 2 3 /** 4 * 多线程的创建,方式一:继承于Thread类 5 * 1.创建一个继承于Thread类的子类 6 * 2.重写Thr ...

  7. CentOS8安装与配置jdk1.8 与远程分发复制jdk到另一个虚拟机

    安装配置JDK 一.卸载系统自带的OpenJDK及相关的java文件 1.查看系统自带OpenJDK版本 命令介绍: 2.卸载java 命令介绍: 二.下载安装jdk 1.命令式安装 查看JDK软件包 ...

  8. Ansible 基础入门

    2)Ansible 介绍 Ansible 基本概念 Ansible 是一种自动化运维工具,基于 Paramiko 开发的,并且基于模块化工作,Ansible 是一种集成 IT 系统的配置管理.应用部署 ...

  9. Spring事务(四)-事务失效场景

    有时候,我们明明在类或者方法上添加了@Transactional注解,却发现方法并没有按事务处理.其实,以下场景会导致事务失效. 1.事务方法所在的类没有加载到Spring IOC容器中. Sprin ...

  10. Zabbix6.0使用教程 (二)—zabbix6.0常用术语

    上一次我们已经详细介绍了zabbix6.0的新增功能,本篇我们来说说zabbix6.0常用的一些术语,这个对小伙伴日常使用zabbix的时候还是非常有用,建议大家收藏起来,话不多说,附上干货. 概览 ...