重学java 20.面向对象 继承 下

news2024/11/13 9:33:14

对未来真正的慷慨,是把一切献给现在

                                                —— 24.4.22

super和this

学习目标:

01.继承中构造方法的特点

02.super和this的具体使用

03.继承的特点

04.练习:为父类中private属性赋值

一、继承中构造方法的特点

1.注意:

        在new子类对象时,会先初始化父类(先走父类的无参构造方法)

2.原因:

        每个构造方法(有参/无参)的第一行,默认都会有一个super(),不写jvm会自动提供一个

        super()代表的是调用父类的无参/有参构造,如果手写则必须写在第一行

子类:

public class Son extends Fu{
    public Son(){
        super();
        System.out.println("我是子类中的无参构造");
    }

    public Son(int i){
        super();
        System.out.println("我是子类中的有参构造");
    }
}

父类:

public class Fu {
    public Fu(){
        System.out.println("我是父类中的无参构造");
    }
}

测试类:

public class Demo110Test {
    public static void main(String[] args) {
        Son son = new Son();// 我是父类中的无参构造
                            // 我是子类中的无参构造
        System.out.println("————————————————");

        //先有父类对象 再有子类对象
        Son son1 = new Son(21);
    }
}

二、super和this的具体使用

1.super的具体使用

①概述

        代表的是父类引用

②作用

        可以调用父类中的成员->在子类的构造中写super()/super(实参)

③使用

        a、调用父类构造方法

                super() -> 调用父类无参构造

                super(实参) -> 调用父类有参构造

        b、调用父类成员变量

                super.成员变量名      

        c、调用父类成员方法

                super.成员方法名(实参)

父类

public class Fu {
    int num = 10;
    public Fu(){
        System.out.println("我是父类中的无参构造");
    }

    public Fu(int data){
        System.out.println("我是父类中的有参构造");
    }

    public void method(){
        System.out.println("我是父类之中的method方法");
    }
}

子类

public class Son extends Fu{
    int num = 100;
    public Son(){
        super();// 调用父类中的无参构造
        System.out.println("我是子类中的无参构造");
    }

    public Son(int data){
        super(18);// 调用父类的有参构造
        System.out.println("我是子类中的有参构造");
    }

    public void method(){
        super.method();// 调用父类的method方法
        System.out.println("我是子类之中的method方法");
        System.out.println(num);// 子类自己的
        System.out.println(super.num);// 调用父类的
    }
}

测试类

public class Demo111Test {
    public static void main(String[] args) {
        Son son = new Son();
        System.out.println("——————————————————————");
        Son son1 = new Son(18);
        System.out.println("——————————————————————");
        Son son2 = new Son();
        son2.method();
    }
}

2.this的具体使用

this概述

        代表的是当前对象(哪个对象调用的this所在的方法,this就代表哪个对象)

②作用

        a、区分重名的成员变量和局部变量

        b、调用当前对象中的成员

③使用

        a、调用当前对象的构造:在构造中

                this():调用当前对象的无参构造

                this(实参):调用当前对象的无参构造

        b、调用当前对象的成员变量

                this.成员变量名

        c、调用当前对象的成员方法:

                this.成员方法名(实参)

④注意:

        不管是super还是this,只要在构造中使用,都必须在第一行,所以二者不能同时手写出来

构造方法

public class Person {
    int num = 10;

    // 无参构造
    public Person(){
        // this(10);
        System.out.println("我是Person中的无参构造");
    }

    //有参构造
    public Person(int data){
        this();
        System.out.println("我是Person中的有参构造");
    }

    public void method(){
        // 重名的局部变量
        int num = 20;
        System.out.println(num);// 20
        System.out.println(this.num);// 10
        this.method01();
        System.out.println("获取Person类中的method方法");
    }

    public void method01(){
        System.out.println("我是Person类中的method01方法");
    }
}

测试类

public class Demo112Test {
    public static void main(String[] args) {
        // person的无参构造
        Person person = new Person();
        System.out.println("————————————————————");
        Person person1 = new Person(15);
        System.out.println("————————————————————");
        Person person2 = new Person();
        person2.method();
    }
}

运行结果

三、继承的特点

1.继承只支持单继承,不支持多继承

        一个后代只能有一个先祖

        public classA extends B,C{}    -> 错误

2.继承支持多层继承

        不能多继承,但是可以多层基础,就是A继承B,B继承C,A中也可以继承到C

        C类就是A类的爷爷类,A类也可以使用C类中的非私有成员

                public class A extends B{}

                public class B extends C{}

3.一个父类可以有多个子类

        一个先祖可以有多个后代

        public class A extends C{}

        public class B extends C{}

4.各方法能否被继承/重写

   构造方法不能继承,也不能重写

   私有方法可以继承,但是不能被重写

   静态方法可以继承,但是不能被重写

5.演示

父类:

public class Fu {
    public void method01(){
        System.out.println("method01方法");
    }

    private void method02(){
        System.out.println("method0方法");
    }

    public static void method03(){
        System.out.println("method03方法");
    }
}

子类:

// 各方法能否被继承/重写演示
public class Son extends Fu{
    @Override
    public void method01(){
        System.out.println("子类重写的method01方法");
    }
    // 但是静态方法可以继承

    // 私有方法和静态方法都不可以被重写
//    @Override
//    private void method02(){
//        System.out.println("method0方法");
//    }
//
//    @Override
//    public static void method03(){
//        System.out.println("method03方法");
//    }

}

测试类:

public class Demo113Test {
    public static void main(String[] args) {
        Son son = new Son();
        son.method03();
    }
}

四、练习:为父类中private属性赋值

1.利用set方法赋值

父类:

public class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Employee() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void work(){
        System.out.println("工作");
    }
}

子类:

public class Teacher extends Employee{
    // 继承可以继承私有/非私有,但是只能使用非私有的
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.setName("小明");
        teacher.setAge(21);
        System.out.println(teacher.getName()+" "+teacher.getAge());
    }
}

测试类:

public class Demo114Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.setName("小明");
        teacher.setAge(23);
        System.out.println(teacher.getName()+" "+teacher.getAge());
    }
}

利用get/set非私有方法,使用了父类中的私有属性进行赋值

2.利用构造方法赋值

 父类:

public class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Employee() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void work(){
        System.out.println("工作");
    }
}

子类:

// 各方法能否被继承/重写演示
public class Son extends Fu{
    @Override
    public void method01(){
        System.out.println("子类重写的method01方法");
    }
    // 但是静态方法可以继承

    // 私有方法和静态方法都不可以被重写
//    @Override
//    private void method02(){
//        System.out.println("method0方法");
//    }
//
//    @Override
//    public static void method03(){
//        System.out.println("method03方法");
//    }

}

teacher类:

public class Teacher extends Employee{
    // 继承可以继承私有/非私有,但是只能使用非私有的
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.setName("小明");
        teacher.setAge(21);
        System.out.println(teacher.getName()+" "+teacher.getAge());
    }
}

测试类:

public class Demo114Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.setName("小明");
        teacher.setAge(23);
        System.out.println(teacher.getName()+" "+teacher.getAge());

        System.out.println("——————————————————————");

        Manager manager = new Manager("小红",22);
        System.out.println(manager.getName()+" "+manager.getAge());
    }
}

利用子类的有参构造,层层调用,中间用super衔接,调用父类中的有参构造,为父类赋值

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

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

相关文章

项目开发过程中的错误记录

一、VUE版本一致但是运行不起来。 管理员运行命令提示符 切换到可以看到package.json的目录下面 npm install --registryhttps://registry.npmmirror.com npm install npm run dev 二、git pull拉取不下来远程项目 三、ssm项目运行时,tomcat输出日志乱码 解决&am…

红黑树封装map和set(模拟实现)

troop主页 临近五一放假,祝大家节日快乐,我们的学习还在路上!! 在前面一章我们已经实现出了红黑树的基本框架,现在我们要有这个底层结构去封装map和set。 一 红黑树的迭代器 但在这之前我们要先把红黑树的迭代器实现出…

SRS WebRTC Whip 和 Whep 部署体验问题

whip 報錯 404 webrtc推流 小窗口一闪而过,然后查看f12回复404的报错信息 chrome版本: 正在检查更新 版本 123.0.6312.123(正式版本) (64 位) centos 7.9 源码安装部署, 代码分支5.0 完全按…

linux /openEuler/annocanda/SecretNote

国产操作系统欧拉(EulerOS)是华为公司自主研发并推广的开源操作系统。它基于Linux内核,旨在为各种设备提供统一的操作系统平台,从而为用户提供更加流畅、安全、可靠和智能的使用体验。 linux 中安装annocanda : Anaconda3-2024.0…

逆向修改app就可以游戏充值到账?

hello ,大家好, 现在市场仍然流行着非常多的传奇类游戏私服或者其他类型的游戏私服,随着私服越来越多(很多并不合法),越来越多的人加入了破解,逆向修改,或者代充的队伍并从中获利。这里我给大家分享一下这些做代充的常规的做法,以及大家作为游戏服务器如何避坑做强校验…

《LINUX运维从入门到精通 》:运维入门者的自学用书

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号:网络豆云计算学堂 座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 写在前面 《Linux运维从入门到精通》从初学者角度…

NCF29A1 高端阻抗匹配

一、前言 Class E 高端 L-Front 匹配集成了额外的滤波器,提供了足够的谐波衰减,使 NCF29A1 与天线在比基频更高的频率下具有相当大的增益。向 PA 提供的阻抗和输出电容与表 1 ZPAOUT 所示相同。 二、原理图 图 1 高端 L-Front 匹配原理图 1&#xff…

【数据结构】AVL树(万字超详细 附动图)

一、前言 二、AVL树的性质 三、AVL树节点的定义 四、AVL树的插入 五、AVL树的平衡调整 六、AVL树的验证 6.1 验证有序 6.2 验证平衡 七、AVL树的删除 八、AVL树的性能和代码 一、前言 还没有学习过二叉搜索树的同学可以移步 【数据结构】二叉搜索树-CSDN博客https:/…

Acrobat Pro DC 2021:强大的PDF编辑软件

Acrobat Pro DC 2021是Adobe公司推出的一款全面而强大的PDF编辑软件,凭借其卓越的性能和丰富的功能,成为了PDF编辑领域的领军者。 Acrobat Pro DC 2021中文激活版下载 这款软件具备全面的PDF编辑功能,包括文本编辑、图片处理、页面组织等&…

Vue3引入高德地图js API 2.0

文章目录 前言一、地图加载1.本文准备环境2.引入库3.加载地图4.加载地图控件 二、POI搜索1.什么是poi搜索2.如何使用 三、绘制点标记与信息窗体1.场景描述2.案例3.信息窗体-链接路由跳转4.进阶-通过Marker自动触发标记点(非鼠标手动点击) 四、jsApi地图事…

指挥中心实战指挥平台-通信指挥类装备多链路聚合设备解决方案实例

一、建设目标及要求 坚持“一切为了实战、一切围绕实战、一切服务实战”的总要求,紧紧围绕大数据应用和自动化、智能化、智慧化这一主题主线,建设升级改造支队指挥中心,集成语音、视频、即时消息、短信、对讲、会议等多媒体通信能力&#xf…

AJAX——图片上传

图片上传流程 1.获取图片文件对象 2.使用FormData携带图片文件 3.提交表单数据到服务器&#xff0c;使用图片url网址 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

埋点,自己写插件,自己写的按钮埋点,掘金同款投递简历

20分钟掌握 Vite 插件开发 - 掘金 vite的生命周期啥的 1.浏览器的控制台输出有样式的字 // const randomLetterPlugin ()>{ // const letters [wwwwwww,000000000000,888888888888]; // //随机获取一个字符并打印 // const printRandomLetter ()>{ // …

LCD彩屏显示方案选型攻略:从接口到GUI开发工具的全面评估

在现代人类社会&#xff0c;彩色显示技术是科技王国里最为绚丽夺目的技术奇葩&#xff0c;LCD彩屏通过显示实时信息并提供交互式的体验&#xff0c;将信息时代打扮得多姿多彩。无论是智能家电还是医疗健康设备领域&#xff0c;精美直观的LCD彩屏显示&#xff0c;往往能够为用户…

学习JFinal

1.五个配置类 configConstants&#xff08;配置&#xff09;&#xff1a; configRoute&#xff08;路由&#xff09;&#xff1a; 2.Controller层&#xff08;控制器&#xff09; 访问流程&#xff1a; Action&#xff1a; getPara&#xff1a; 参数说明&#xff1a;第一个参…

monkey测试详解

一、monkey测试的定义 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样,不知道程序的任何用户交互方面的知识,就对界面进行无目的、乱点乱按…

MATLAB基于图像特征的火灾检测

实验目标 基于图像特征的火灾检测 实验环境 Windows电脑、MATLAB R2020a 实验内容 1.读取图像&#xff0c;彩色图像的灰度化处理&#xff0c;进行边缘检测&#xff0c;实现对火焰的检测。 2.对两幅RGB图像进行火焰特征提取实验 3.对比分析边缘检测算法处理结果和基于图像…

离散型制造行业智能工厂解决方案,助力国家新智产业升级

离散型制造行业智能工厂标准解决方案 离散型制造行业的智能工厂解决方案是推动国家智能制造产业升级的关键。 1. 集中优势资源&#xff1a;实施攻关计划&#xff0c;瞄准关键核心技术和重点产业进行定向突破&#xff0c;特别是在集成电路(IC)、AI、生物医药等领域。2. 国家创…

华为外派伊拉克,一天补助6000元

大家好&#xff0c;我是YUAN哥&#xff01; 最近有朋友询问关于华为外派伊拉克的补助情况&#xff0c;听说一天能拿到6000元&#xff0c;这听起来相当诱人&#xff0c;但真实性有待考证。 据我所知&#xff0c;华为对艰苦地区的外派员工确实有补助&#xff0c;但最高一天是100美…

关于pdf.js中文本坐标尺寸的使用

一个电子教材项目中有这样一个需求&#xff1a; 用户向网站上传一个PDF书籍后&#xff0c;网站可以对PDF书籍进行解析&#xff0c;并支持用户对PDF书籍的每一页做一些操作&#xff0c;比如&#xff1a;为英语课本的单词和句子添加音频热区。因为热区数量很多&#xff0c;所以&a…