【继承之extends关键字和super关键字】

news2024/11/19 14:54:25

文章目录

  • 继承是什么?为什么要继承?
  • 怎么继承?
    • 继承的语法 关键字extends
  • 子类中访问父类的成员变量
    • 1.子类和父类的成员变量不同名
    • 2.子类和父类成员变量同名
  • 子类中访问父类的成员方法
    • 1. .子类和父类的成员方法名字不同
    • 2..子类和父类的成员方法名字相同
  • super关键字(在子类中访问父类成员)
    • 1. 访问父类的成员方法
    • 2.访问父类的成员变量
  • 总结


继承是什么?为什么要继承?

有时候创建一些类的成员变量和方法时,会发现它们之间有共同的地方,为了金少重复的代码,提高效率,java的面向对象提出了继承,就是把共同的代码拿出来放进一个类里面,需要调用它的时候继承它就可以了。

在这里插入图片描述

总结:继承是一种思想,对共性进行抽取,达到代码复用的效果

怎么继承?

继承的语法 关键字extends

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

修饰符 class 子类 extends 父类 {
}

继承前:

class Cat {
    public String name;
    public int age;

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }
    public void miao(){
        System.out.println(this.name+"正在喵喵叫");
    }
}

class Dog{
    public String name;
    public int age;

    public void eat(){
        System.out.println(this.name+"正在吃饭");
    }
    public void bark(){
        System.out.println(this.name+"正在汪汪叫");
    }

}

继承后:

class Animal{
    public String name;
    public int age;

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }
}
class Cat extends Animal {

    public void miao(){
        System.out.println(this.name+"正在喵喵叫");
    }
}

class Dog extends Animal{
    public void bark(){
        System.out.println(this.name+"正在汪汪叫");
    }
}

总结:
Dog和Cat都继承了Animal类,其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类,继承之后,子类可以复用父类中成员

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

第一种:

1.子类和父类的成员变量不同名

在这里插入图片描述
第二种:

2.子类和父类成员变量同名

在子类方法中 或者 通过子类对象访问成员时:
1.当子类与父类的成员变量同名时,优先使用子类自己的
2.如果访问的成员变量 子类没有 就去访问父类的
3.如果子类和父类都没有,则编译会报错

class Base{
    public int a = 15;
    public int b = 20;
}
class Derived extends Base {
    public int a = 77;
    public void method(){
        System.out.println("a = "+a);
        System.out.println("b = "+b);
    }
}
public class Test2 {
    public static void main(String[] args) {
        Derived derived = new Derived();
        derived.method();
        //输出 a = 77  
        //     b = 20
    }
}

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

1. .子类和父类的成员方法名字不同

class Base{
    public void method(){
        System.out.println("Base:method:");
    }
}
class Derived extends Base{
    public void method2(){
        System.out.println("Derived:method:");
    }
    public void tset3(){
       method();
       method2();
    }
}
public class Test2 {
    public static void main(String[] args) {
        Derived  derived = new Derived();
        derived.tset3();
        // 输出 Base:method:
              //Derived:method:
    }
}

2…子类和父类的成员方法名字相同

class Base{
    public void method(){
        System.out.println("Base:method:");
    }
}
class Derived extends Base{
    public void method2(){
        System.out.println("Derived:method:");
    }
    public void method(){
        System.out.println("Derived:method:");
    }
    public void tset3(){
       method();
       method2();
    }
}
public class Test2 {
    public static void main(String[] args) {
        Derived  derived = new Derived();
        derived.tset3();
        //输出 Derived:method:
        //     Derived:method:
    }
}

这时候说

 public void method(){
        System.out.println("Derived:method:");
//和
 public void method(){
        System.out.println("Base:method:");
    }
    //构成重载了

总结:
1.通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找不到去父类找,两者都找不到则编译报错。
2.通过派生类对象访问父类与子类同名方法时,优先访问子类的成员方法

super关键字(在子类中访问父类成员)

如果要在子类方法中访问父类同名成员时,Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员

1. 访问父类的成员方法

class Base{
    public void method(){
        System.out.println("Base:method:");
    }
}
class Derived extends Base{
    public void method2(){
        System.out.println("Derived:method:");
    }
    public void method(){
        System.out.println("Derived:method:");
    }
    public void tset3(){
       super.method();
       method2();
    }
}
public class Test2 {
    public static void main(String[] args) {
        Derived  derived = new Derived();
        derived.tset3();
        //输出 Base:method:
         //   Derived:method:
    }
}

2.访问父类的成员变量

class Base{
    public int a = 15;
    public int b = 20;
}
class Derived extends Base {
    public int a = 77;
    public void method(){
        System.out.println("a = "+super.a);
        System.out.println("b = "+b);
    }
}
public class Test2 {
    public static void main(String[] args) {
        Derived derived = new Derived();
        derived.method();
    }
}

【注意事项】

  1. 只能在非静态方法中使用

总结:
在子类方法中,如果想要明确访问父类中成员时,借助super关键字即可。

总结

本章内容较容易理解,理解继承的原理,语法是修饰符 class 子类 extends 父类,子类继承父类用extends关键字,在成员名字相同时在子类中访问父类成员用supet关键字。

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

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

相关文章

JUC并发编程之Synchronized锁优化

目录 1. Java对象头 2. Synchronized锁优化 2.1 偏向锁 2.2 轻量级锁 2.3 重量级锁 2.4 各种锁对比 1. Java对象头 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance D…

数据结构 C语言 2.1 线性表抽象数据类型 2.2 小议顺序表

一、线性表抽象数据类型 线性表的定义 定义:零个或多个数据元素的有限序列 线性表的特点: 1.它是一个序列 数据元素之间是有序的 数据元素之间是一对一的关系 2.有限性 线性表的数据元素个数是有限的 注意:零个数据元素的有限序列又…

NewStarCTF2023week4-依旧是空白(snow隐写)

打开附件的空白图片,CRC报错,很可能是高度被修改 爆出图片正确的宽度和高度并修复 打开看到密码 password: s00_b4by_f0r_y0u 另一个文件是空白的txt文档,大致看了一下像是不可见字符,尝试 white_space,发现不是&…

Uservue 中 keep-alive 组件的作用

目录 前言 用法 代码 理解 keep-alive 是 Vue.js 中一个内置的组件,它能够将不活动的组件实例保存在内存中,防止其被销毁,以便在后续需要时能够快速重新渲染。这个功能在一些需要频繁切换但不希望每次都重新渲染的场景中非常有用&#xf…

详解预处理(2)

目录 #undef 命令行定义 条件编译 NO1. NO2.多个分支的条件编译 NO3.判断是否被定义 NO4.嵌套指令 文件包含 头文件被包含的方式 本地文件包含 库文件包含 嵌套文件包含 其他预处理指令 今天接着继续讲解预处理的点,前面已经深入学习了#define。 #unde…

基于Springboot 游戏娱乐信息平台-计算机毕设 附源码 04691

Springboot 游戏娱乐信息平台 目 录 摘要 1 绪论 1.1研究内容 1.2国内外研究慨况 1.3研究方法 1.4论文结构与章节安排 2 游戏娱乐信息平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性…

EvilAppleJuice(邪恶苹果汁)-ESP32C3项目(iphone疯狂弹窗)

原作者作品页: ckcr4lyf/EvilAppleJuice-ESP32: Spam Apple Proximity Messages via an ESP32 (github.com) 代码优化一下,增加呼吸灯效果方便知道设备运行情况,我是用arduino烧录 仅作交流学习使用,请勿在公开场合滥用 运行效果…

黑豹程序员-Python入门-for循环

文章目录 1、for循环语法2、巩固案例:长安三万里你记得的三位诗人?实现步骤:第一步:新建一个列表,存储诗人姓名第二步:列表用[]表示,元素之间用逗号,分隔第三步:用列表[索引]的方法将…

莫名其妙el-table不显示问题

完全复制element-ui中table代码,发现表格仍然不显示,看别人都说让降低版本,可我不想降低啊,不然其他组件有可能用不了,后来发现可以通过配置vite.config.js alias: {: path.resolve(__dirname, src),vue: vue/dist/vue…

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…

nexus5x 刷机root

刷机 进入fastboot模式 adb reboot bootloader 或者开机 音量减 解锁bootloader fastboot oem unlock 刷入rom包 下载 Nexus 和 Pixel 设备的出厂映像 | Google Play services | Google for Developers 选一个合适的ROM包下载到电脑的某个位置,然后unzip解…

国家网信办发布第十三批境内区块链信息服务备案编号

2019年2月15日《区块链信息服务管理规定》(以下简称《管理规定》)正式实施以来,国家互联网信息办公室依法依规组织开展备案审核工作,已发布2批次共506个境内区块链信息服务名称及备案编号,近日正式发布第三批共224个境…

剪映怎么合并两个视频?几个步骤轻松搞定!

合并两个视频可以方便我们管理、节省存储空间、提高处理效率、满足特定要求或实现特定效果等目的。而剪映作为我们常用的视频处理软件,如何利用其合并两个视频呢?一起来看看吧~ 方法一:使用剪映专业版 1、运行剪映,主…

关于maven项目中依赖无法下载的解决方案

场景描述 在下载selenium的依赖时,虽然相依的jar包已经存在,但是在idea中依然报红 解决方案 在jar无法正常下载时可以尝试使用——找到下载的文件夹,删除整个文件夹后重新通过链接下载 过程演示 C:\Users\lenovo\.m2 所有依赖的jar包都在这…

errno变量和显示错误信息

一、errno Linux很多函数发生错误,只会返回-1。所以,我们只知道函数发生了错误,却不知道具体发生了什么错误。 因此Linux 系统下对常见的错误做了一个编号,每一个编号都代表着每一种不同的错误类型。 发生错误时,对…

CTF-Crypto学习记录-第三天 MD5加密算法(信息摘要算法)“ “

文章目录 0x1 MD5 基本介绍0x2 MD5 加密特点0x3 MD5 加密原理步骤0x01 对明文数据进行信息填充0x02 设置初始变量0x03 加密运算过程加密运算流程图&#xff1a;四个非线性函数&#xff1a;Mj表示消息的第j个子分组&#xff08;从0到15&#xff09;&#xff0c;<<&#xf…

Python web开发中的单元测试自动化技巧!

Python作为一种广泛使用的编程语言&#xff0c;在web开发中也扮演着重要的角色。在进行web开发时&#xff0c;单元测试是一个不可或缺的环节。单元测试可以确保代码的正确性&#xff0c;并且能够在开发过程中快速发现问题&#xff0c;有助于提高代码质量和开发效率。 在Python…

非计算机小白成功转型Python教学分析师,月薪2W后,我的学习经验总结!

最近1年的主要学习时间&#xff0c;都投资到了python据分析和数据挖掘上面来了&#xff0c;虽然经验并不是十分丰富&#xff0c;但希望也能把自己的经验分享下&#xff0c;最近也好多朋友给我留言&#xff0c;和我聊天&#xff0c;问我python该如何学习&#xff0c;才能少走弯路…

桉木红面模板批发915*1830mm规格建筑木胶板

我们很自豪地介绍我们的产品&#xff1a;桉木红面建筑模板。作为一家专业的建筑木胶板生产批发商&#xff0c;我们提供高质量的915*1830*15mm规格的桉木红面板&#xff0c;为您的建筑项目提供卓越的解决方案。 桉木红面板是由优质的桉木原料制成&#xff0c;经过精细的加工和处…

论文分享——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 &#xff1a;范少华 研究方向 &#xff1a;图神经网络 论文标题 &#xff1a;基于学习解纠缠因果子结构的图神经网络去偏 论文链接 &#xff1a;https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…