类和对象—继承(1)

news2025/3/30 23:34:29

目录

  • 1、继承
    • 1.1、继承的概念
    • 1.2、继承的语法
  • 2、子类访问父类成员
    • 2.1、子类中访问父类的成员变量
    • 2.2、子类中访问父类的成员方法
    • 2.3、super 关键字
  • 3、子类构造方法

1、继承

在 Java 中,类对现实中的实体进行描述,而类实例化的对象用来表示现实中的实体。但是现实世界的实体多种多样,它们之间必然会存在一定关系,那么在设计程序时就需要我们考虑。

在这里插入图片描述
上述是 Dog 和 Cat 类的成员信息,不难看出,Dog 和 Cat 类都有共同的成员变量和成员方法,且每次定义宠物,相同的字段和方法又会重复出现,这样会导致做很多重复的事情,代码的可读性也不高,此时我们可以将这些类的共性抽取出来,从而实现代码复用,即需要用到继承。

1.1、继承的概念

继承机制:是面向对象程序设计实现代码复用的重要手段,它允许程序员在保持原有特性的基础上进行扩展,增加新功能,这样产生的新的类称为派生类。继承呈现了面向对象程序的层次结构,体现了从简单到复杂的认知过程,继承主要解决的问题是抽取共性,实现代码复用,实现多态。
对上述Dog 和 Cat 类抽象并扩展:
在这里插入图片描述
如上图所示,抽取出来的 Animal 类称为父类/基类/超类,扩展产生的新类称为子类/派生类。

1.2、继承的语法

在 Java 中如果要表示类之间的继承关系,需要借助 extends 关键字:

修饰符 class 子类 extends 父类 {
	//...
}

对上述的场景使用继承方式设计:

// 父类
public class Animal {
    public String name;
    public int age;
    public float weight;

    public void eat(){
        System.out.println(name + "在吃饭~~~");
    }

    public void sleep(){
        System.out.println(name + "在睡觉~~~");
    }
}

// 子类
public class Cat extends Animal {
    // 是对基类Animal进行扩增
    public void mew(){
        System.out.println(name + "喵喵喵~~~");
    }
}

// 子类
public class Dog extends Animal {
    // 是对基类Animal进行扩增
    public void bark(){
        System.out.println(name + "旺旺旺~~~");
    }
}

注意:

  1. 子类会继承父类的成员变量和成员方法。
  2. 子类继承父类后,必须要添加自己特有的成员,否则就没有必要继承。

2、子类访问父类成员

在继承体系中,子类将父类中的方法和字段继承下来了,那么子类是否可以直接访问父类中继承下来的成员。

2.1、子类中访问父类的成员变量

  1. 子类和父类不存在同名成员变量,那么子类可以直接访问父类的成员变量。
  2. 子类和父类存在同名成员变量:
    • 如果访问的成员变量子类中有,那么优先访问自己的成员变量,从父类继承下来的同名成员变量不能被直接访问,称为同名隐藏。
    • 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类中也没有,则编译报错。

2.2、子类中访问父类的成员方法

  1. 子类和父类不存在同名成员方法,那么在子类方法或者通过子类对象访问方法时,则优先访问自己的,自己没有再去父类中找,如果父类也没有则编译报错。
  2. 子类和父类存在同名成员方法:
    • 访问子类和父类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。
    • 访问子类和父类中同名方法时,如果子类和父类的同名方法实现了重写,即只有方法体不同,其他都相同时,优先调用子类的方法,无法直接调用到父类的方法。
    • 访问子类和父类中同名方法时,如果子类和父类的同名方法实现了重载,即只有参数列表和方法体不同,其他都相同时,根据传递的实参的类型来确定调用的是父类还是子类的方法。

那么当子类和父类的成员变量名相同,如何直接访问到父类的成员变量呢?可以在父类中提供对应的方法来操作,也可以使用 super 关键字。当子类和父类的成员方法实现了重写时,如何直接访问到父类的成员方法呢?需要用到 super 关键字。

2.3、super 关键字

super 关键字的作用主要是在子类方法中访问父类的成员。
当子类和父类的成员变量名相同,如果直接访问该成员变量,那么优先访问到的是子类中的成员变量,但是利用 super.成员变量名 则访问到的是父类中的成员变量。
当子类和父类的成员方法构成重写,如果直接访问该成员方法,那么优先访问到的是子类中的成员方法,但是利用 super.成员方法名 则访问到的是父类中的成员方法。

// 父类
public class Base {
    int a;
	public void func1(){
        System.out.println("Base.func1()");
    }
}

// 子类
public class Derived extends Base {
    int a;
    // func1() 实现了重写
    public void func1(){
        System.out.println("Derived.func1()");
    }

	public void method(){
		a = 10; // 此时改变的是子类中 a 的值
		super.a = 20; // 此时改变的是父类中 a 的值
		
		func1(); // 此时调用的是子类中的 func1() 方法
		super.func1(); // 此时调用的是父类中的 func1() 方法
	} 
}

注意:

  1. super 关键字只能在非静态方法中使用。
  2. super 后面必须跟上 .类成员,不能单独使用,否则报错。
  3. 使用 super 访问父类的成员时,如果有则访问,没有则编译报错。

3、子类构造方法

构造方法用来初始化成员变量,那么子类继承了父类的成员,也需要调用父类的构造方法来初始化从父类继承下来的成员变量,即:在构造子类对象时,需要先调用父类的构造方法,然后执行子类的构造方法。

  1. 如果父类没有显示定义任何的构造方法或者显示定义了无参的构造方法时,则子类可以定义也可以不定义构造方法,此时编译器会自动生成无参的构造方法。当编译器在编译子类构造方法时,会在子类构造方法中新增加一条语句,即调用父类的无参构造方法。

在这里插入图片描述

  1. 如果基类显示定义了有参数的构造方法,此时子类就必须要显式定义带有参数的构造方法,否则编译报错。编译器无法自动调用父类中有参数的构造方法,因为编译器调用的时候不知道传递什么参数,所以子类必须在其构造方法的内部通过 super 关键字显式调用父类带有参数的构造方法。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

试试智能体工作流,自动化搞定运维故障排查

APO 1.5.0版本全新推出的智能体工作流功能,让运维经验不再零散!只需将日常的运维操作和故障排查经验转化为标准化流程,就能一键复用,效率翻倍,从此告别重复劳动,把时间留给更有价值的创新工作。更贴心的是&…

Linux应用:线程基础

线程介绍 进程是程序在操作系统里的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文…

要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目

文章目录 要创建一个基于Spring Boot、Thymeleaf、MyBatis Plus和MySQL的简单表格增删改查(CRUD)项目1. 创建Spring Boot项目2.项目配置2.1 依赖yml配置数据库表配置 3.代码实现3.1 实体类3.2 数据访问层3.3 服务层3.4 控制层3.5 Thymeleaf模板 要创建一…

解决Cubemx生产的 .ioc文件不能外部打开的方法

正常来说,cubemx生成的文件会有图标 但是当图标白色的时候,无法通过直接点击这个文件进入cubemx 1.首先检查java环境是不是装的JAVA8,如果是的话进行第二步操作; 2.重新安装一次cubemx,在安装的时候选择为我安装&…

在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程

Linux 部署 MineCraft 服务器 详细教程(丐版,无需云服务器) 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花,实现内网穿透,邀…

Transformer | 一文了解:缩放、批量、多头、掩码、交叉注意力机制(Attention)

源自: AINLPer(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-27 更多:>>>>专注大模型/AIGC、学术前沿的知识分享! 引言 之前的文章:2万字长文!一文了解…

原型验证后客户推翻原有需求,如何止损

原型验证后客户推翻原有需求时止损的有效方法包括:迅速评估影响范围、立即开展沟通确认、调整项目计划和资源配置、更新变更管理流程、协商成本分担机制。其中,迅速评估影响范围是关键,项目团队必须立即明确此次变更的具体影响,包…

六、小白学JAVA-类和对象

1、什么是类和对象 人类---类:走路、说话、学习 人---对象:具体到某个人,就是对象,走路、说话、学习,每个人都是独特的人。 public class Person {String name;public void walk() {System.out.println("我会走…

STM32硬件IIC与OLED使用

OLED屏幕介绍 OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点,被认为是下一代的平面显示屏新兴应用技术 OLED显示…

基于Spring Boot的电动车智能充电服务平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

十、JavaScript对象

一、对象 创建对象的方法有三种:字面量、new、构造函数。 1.利用字面量创建对象 花括号{}里面包含了表达这个具体事物(对象)的属性和方法 // 1.利用对象字面量创建对象{}// var obj {}; // 创建了一个空的对象var obj {uname: black,ag…

FFmpeg开发学习:音视频封装

1.基本流程 1.输入参数 输出文件路径 char *output 视频编码参数 AVCodecParameters *video_par 音频编码参数 AVCodecParameters *audio_par 数据包 AVPacket *packets[] 2.封装流程 (1)创建输出的上下文AVFormatContext指针 AVFormatContext *out_fm…

hackmyvm-reversteg

arp-scan -l nmap -sS -v 192.168.222.45 在源码中可以看到 根据下面的提示可以猜测117db0148dc179a2c2245c5a30e63ab0是一个图像文件 将图片下载到本地 隐写术 在两张图片上使用strings,发现有一些可打印的字符串 strings 117db0148dc179a2c2245c5a30e63ab0.jpg base64解码…

UE4学习笔记 FPS游戏制作17 让机器人持枪 销毁机器人时也销毁机器人的枪 让机器人射击

添加武器插槽 打开机器人的Idle动画,方便查看武器位置 在动画面板里打开骨骼树,找到右手的武器节点,右键添加一个插槽,重命名为RightWeapon,右键插槽,添加一个预览资产,选择Rifle,根…

设计模式(创建型)-建造者模式

定义 建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。该模式允许通过多个简单的步骤逐步构建出一个复杂的对象,用户只需指定复杂对象…

Git 之配置ssh

1、打开 Git Bash 终端 2、设置用户名 git config --global user.name tom3、生成公钥 ssh-keygen -t rsa4、查看公钥 cat ~/.ssh/id_rsa.pub5、将查看到的公钥添加到不同Git平台 6、验证ssh远程连接git仓库 ssh -T gitgitee.com ssh -T gitcodeup.aliyun.com

黑马点评项目

遇到问题: 登录流程 session->JWT->SpringSession->tokenRedis (不需要改进为SpringSession,token更广泛,移动端或者前后端分离都可以用) SpringSession配置为redis模式后,redis相当于分布式se…

【AVRCP】AVRCP核心术语解析

目录 一、协议核心术语:架构的基石 1.1 音视频控制协议簇(AVRCP 生态链) 1.2 数据传输协议(L2CAP 核心术语) 二、设备架构术语:角色与交互 2.1 设备角色模型(CT/TG 二元架构) …

【弹性计算】异构计算云服务和 AI 加速器(四):FPGA 虚拟化技术

异构计算云服务和 AI 加速器(四):FPGA 虚拟化技术 🚀 FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种可重构的半导体芯片,允许用户根据需要动态配置硬件逻辑&#xff…

编译原理——自底向上语法优先分析

文章目录 自底向上优先分析概述一、自底向上优先分析概述二、简单优先分析法(一)优先关系定义(二)简单优先文法的定义(三)简单优先分析法的操作步骤 三、算法优先分析法(一)直观算符…