Java学习笔记——继承(包括this,super的使用总结)

news2025/1/10 2:48:17

继承:

使用情景:当类与类之间,存在相同(共性)的内容,并满足子类是父类的一种,就可以考虑使用继承,来优化代码

  • Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系            public class Student extends Person{};
  • Student被称为子类(派生类),person称为父类(基类或超类)

继承的格式:public class 子类 extends 父类{} 

使用继承的好处

  • 可以把多个子类中重复的代码抽取到父类中了,提高代码的复用性
  • 子类可以在父类的基础上,增加其他功能,使子类更强大 

 继承的特点:Java只支持单继承不支持多继承,但支持多层继承

注:

  • 单继承:一个子类只能继承一个父类
  • 不支持多继承:子类不能同时继承多个父类
  • 多层继承:子类A继承父类B,父类B可以继承父类C
  • 每一个类都直接或者间接的继承于Object
  • 子类只能访问父类中非私有的成员

子类到底能继承父类中的哪些内容:

构造方法非私有   不能private  不能
成员变量非私有    能private 能
成员方法能被添加入虚方法表   能否则不能

注:虚方法可以被覆写(Overriding)的方法都可以称作虚方法,因此虚方法并不需要做特殊的声明,也可以理解为除了用static、final、private修饰之外的所有方法都是虚方法。

特点:

1.成员变量的访问特点:就近原则(谁离我近,我就用谁)

先在局部位置找然后在本类成员位置找然后在父类成员位置找,逐级往上。

若重名,则sout(name);为从局部位置开始往上找

sout(this.name);为从本类成员位置开始往上找

sout(super.name);为从父类成员位置开始往上找

 2.成员方法的继承特点:

  • 直接调用满足就近原则:谁离我近,我就用谁
  • super调用,直接访问父类

方法的重写

当父类的方法不能满足子类现在的需求时,需要进行方法重写

书写格式:在继承体系中,子类出现了和父类一模一样的方法声明,我们就称子类这个方法是重写的方法

@Override重写注解

  1. @Override是放在重写后的方法上,校验子类重写时语法是否正确
  2. 加上注解后如果有红色波浪线,表示语法错误。
  3. 建议重写方法都加@Override注解,代码安全,优雅!

 

 方法重写的注意事项和要求

  1. 重写方法的名称,形参列表必须与父类中的一致
  2. 子类重写父类方法时,访问权限必须大于等于父类(暂时了解:空着不写<protected<public )
  3. 子类重写父类方法时,返回值类型子类必须小于等于父类
  4. 建议:重写的方法尽量和父类保持一致
  5. 私有方法不能被重写
  6. 子类不能重写父类的静态方法
  7. (5,6点总结)只有被添加到虚方法表中的方法才能被重写

 构造方法的继承特点:

  • 父类中的构造方法不会被子类继承
  • 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

为什么?

  • 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
  • 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化 

怎么调用父类构造结构的?

  •  子类构造方法的第一行语句默认都是:super(),不写也存在,且必须在第一行
  • 如果想调用父类有参构造,必须手动写super进行调用

 继承中构造方法的访问特点:

  • 子类不能继承父类的构造方法,但是可以通过super调用
  • 子类构造方法的第一行,有一个默认的super()
  • 默认先访问父类中无参的构造方法,再执行自己
  • 如果想要方法文父类有参构造,必须手动书写

 this、super的使用总结

  • this:理解为一个变量,表示当前方法调用者的地址值
  • super:代表父类存储空间
关键字访问成员变量访问成员方法访问构造方法
this

this.成员方法

访问本类成员方法

this.成员方法(...)

访问本类成员方法

this(...)

访问本类构造方法

super

super.成员方法

访问父类成员方法

super.成员方法(...)

访问父类成员方法

super(...)

访问父类构造方法

 练习:

package itheimaoopextenceao5;

public class Employee {
    private String id;
    private String name;
    private double salary;

    public Employee() {
    }

    public Employee(String id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return salary
     */
    public double getSalary() {
        return salary;
    }

    /**
     * 设置
     * @param salary
     */
    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String toString() {
        return "Employee{id = " + id + ", name = " + name + ", salary = " + salary + "}";
    }
    public void work(){
        System.out.println("员工在工作");
    }
    public void eat(){
        System.out.println("吃米饭");
    }
}
package itheimaoopextenceao5;

public class Manager extends Employee {
    private double bouns;

    public Manager() {
    }

    public Manager(String id, String name, double salary, double bouns) {
        super(id, name, salary);
        this.bouns = bouns;
    }

    public double getBouns() {
        return bouns;
    }

    public void setBouns(double bouns) {
        this.bouns = bouns;
    }
    @Override
    public void work(){
        System.out.println("管理他人");
    }

}
package itheimaoopextenceao5;

public class cooker extends Employee {
    public cooker() {
    }

    public cooker(String id, String name, double salary) {
        super(id, name, salary);
    }
    @Override
    public void work(){
        System.out.println("厨师正在炒菜");
    }
}
package itheimaoopextenceao5;

public class Test {
    public static void main(String[] args) {
        Manager m=new Manager("heima001","zhangsan",4000,2000) ;
        System.out.println(m.getId()+","+m.getName() +","+m.getSalary() +","+m.getBouns() );
        m.eat() ;
        m.work() ;

    }
}

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

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

相关文章

requests模板成功下载,但是不能在pycharm中运行

在做实验的过程中&#xff0c;需要用到requests&#xff0c;但是在pycharm中成功下载&#xff0c;仍然无法使用&#xff0c;找了很久&#xff0c;解决方法如下&#xff1a; 进入win中的命令提示符 下载requests模块 pip install requests输入python显示你的python的基本信息&…

《动手学深度学习》-21卷积层里的多输入多输出通道

沐神版《动手学深度学习》学习笔记&#xff0c;记录学习过程&#xff0c;详细的内容请大家购买书籍查阅。 b站视频链接 开源教程链接 卷积层里的多输入多输出通道 大家通常最在意的一个超参数&#xff1a; RGB图像不仅仅是单纯的矩阵&#xff0c;是3 x h x w的形状&#xf…

基于Python的图像信息隐藏技术的设计与实现

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推…

使用高斯滤波器进行表面开放轮廓过滤研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

『已解决』VMware 打开运行一段时间后卡死,CPU占比增至100%

&#x1f4e3;读完这篇文章里你能收获到 通过图文方式解决VMware 打开运行一段时间后卡死&#xff0c;CPU占比增至100%的问题 文章目录 一、系统环境二、问题描述三、解决办法1. 检查Hyper-V没有开启2. 禁止HV主机服务3. 设置Hyper-V服务为关闭状态4. 重启电脑 一、系统环境 …

开源跨境电商ERP的优缺点分析,你知道几个?

作为电子商务领域的专家&#xff0c;我们不得不关注开源跨境电商ERP的崛起。在这篇文章中&#xff0c;我们将深入探讨开源跨境电商ERP的优点和缺点&#xff0c;帮助您更好地了解这一新兴技术的潜力与挑战。 1. 开源跨境电商ERP的优点 开源跨境电商ERP相较于传统的商业ERP系统…

概念解析 | 全极化雷达成像

注1&#xff1a;本文系“概念解析”系列之一&#xff0c;致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是&#xff1a;全极化雷达成像。 全极化雷达成像** 高分辨全极化昆虫雷达极化校准与昆虫体轴方向估计 一、背景介绍 雷达是20世纪的一项伟大发明&#xff0…

pip安装torch_scatter, torch_sparse报错

在安装torch_geometric时还需要安装torch_scatter和torch_sparse&#xff0c;但是直接使用pip install安装会报错&#xff0c;报错内容是缺乏依赖项。查了好久发现直接下载whl到本地再使用pip安装时最不容易出错的&#xff0c;这里记录一下&#xff0c;避免再次掉坑。 首先需要…

软文稿件写作方法有哪些?

软文稿件是一种以软性推广为目的的文章&#xff0c;旨在通过正面、有吸引力的方式向读者传递信息和促进品牌或产品的推广。 接下来伯乐网络传媒给大家分享一些常见的软文稿件写作方法&#xff0c;通过运用这些技巧和策略&#xff0c;可以帮助你撰写出更具吸引力和实用性的软文…

国产化-达梦数据库安装2

目录 DM8数据库下载地址 安装一路狂飙next 启动服务 随着国家政府的推广、越来越多的政府项目、在系统部署需要采购国产服务器、数据库等 DM8数据库下载地址 https://eco.dameng.com/download/ 安装一路狂飙next windos安装比较简单直接next即可 仅仅记录几个关键疑问地方k…

Nature:LK-99 不是超导体

研究人员似乎已经解开了 LK-99 之谜。科学探测工作发现了这种材料不是超导体的证据&#xff0c;并澄清了它的实际特性。 这一结论打破了人们对 LK-99 —— 一种铜、铅、磷和氧的化合物&#xff08;标志着发现了第一种在室温和环境压力下工作的超导体&#xff09;的希望。相反&a…

Jmeter分布式性能压测-常见问题+解决

前言 安装常见问题问题1&#xff1a; [rootiZwz95j86y235aroi85ht0Z bin]# ./jmeter-server Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]] Server failed to start: java.rmi.…

大学生创业出路【第二弹】科创训练营

目录 &#x1f680;一、我从哪里了解到的训练营 &#x1f680;二、训练营里学习和日常 &#x1f50e;学习 &#x1f50e;环境和设备 &#x1f50e;遇到的人 &#x1f50e;团队记录视频 &#x1f680;三、感悟 ​​​​个人主页&#xff1a;一天三顿-不喝奶茶&#x1f39…

性能测试没那么难!RunnerGo,简单、好用

在当前软件测试行业&#xff0c;熟练掌握性能测试已经是测试工程师们面试的敲门砖了&#xff0c;当然还有很多测试朋友们每天的工作更多的是点点点&#xff0c;性能方面可能也只是做过简单的并发测试&#xff0c;对于编写脚本&#xff0c;搭建环境方面也比较陌生。今天这篇文章…

Stable Diffusion 系列教程 | 快速入门

目录 1.基本原理 2.主流方式 3.配置要求 3.1 显卡方面 4.基本界面 4.1 模型设置区 4.2 菜单栏区域 4.3 提示词区 4.4 出图设置区 5.文生图基本操作流程 5.1 选用模型&#xff0c;撰写提示词 5.2 进行出图设置 5.3 再次出图&#xff01; 5.4 保存 1.基本原理 在20…

友思特干货|如何克服边缘视觉的带宽限制?

引言 在追求更高像素、帧率和空间分辨率的视觉行业&#xff0c;边缘视觉与图像采集面临巨大挑战。其中&#xff0c;1GigE相机输出已不足&#xff0c;传输问题有待解决。与此同时&#xff0c;图像传感器的快速发展也使接口带宽成为瓶颈。 友思特提出创新解决方案&#xff0c;通…

中国最大规模量子计算云平台重磅发布!

8月18日下午&#xff0c;2023中国算力大会第二届“西部数谷”算力产业大会算领未来“8大成果”环节中&#xff0c;中国电科与中国移动携手发布“全国规模最大的量子计算云平台”&#xff0c;这是国内首个央企合作量子计算云平台&#xff0c;也是业界第一次实现“量子与通用算力…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…

Oracle通过参数指定字段

需求&#xff1a;获取月份的值 家人们&#xff0c;刚开始我想传入月份字段作为参数去实现&#xff0c;没实现&#xff0c;然后换了种方式处理了。 解决方案 ## 使用了decode, month是数字 decode(#{month,jdbcTypeINTEGER}, 1,E.JANUARY, 2,E.FEBRUARY, 3,E.MARCH, 4,E.APRIL, …

Java中数组和集合的对比,以及什么情况下使用数组更合适,什么情况下使用集合更合适。集合的基本介绍和集合体系图。

在Java中&#xff0c;数组和集合&#xff08;Java集合框架&#xff09;都用于存储多个元素。它们各自有不同的特点和适用场景。下面我会对数组和集合进行对比&#xff0c;并解释何时使用集合更好&#xff0c;以及何时使用数组更合适。 数组和集合的对比&#xff1a; 数组&…