Java基础入门day21

day21

思考:构造方法能否实现重写

引申出来三个问题:

  1. 一个类是否可以继承它自身

  2. 一个类是否可以继承它的同名类

  3. 构造方法能否实现重写

结论:

一个类如果继承了自己,会出现递归构造调用

一个类可以继承它的同名类,必须要写其完整的全路径,而且注意不能导入该父类

由于构造方法无法实现继承,则构造方法无法实现重写

package com.saas.oo;
​
public class MyClass {
}
package com.saas.oo2;
​
//import com.saas.oo.MyClass;
​
/**
 * 一个类不能继承它自身,否则会出现递归构造调用
 * 一个类可以继承它的同名类,继承它的同名类时必须要指定其同名类的完整路径,不能导入同名类
 * 构造方法不能实现继承,所以构造方法无法实现重写
 */
public class MyClass extends com.saas.oo.MyClass{
}

思考:构造子类对象时一定会调用父类构造器吗?

package com.saas.oo2;
​
public class Father {
​
    public Father(){
        System.out.println("this is Father Constructor");
    }
}
package com.saas.oo2;
​
public class Son extends Father{
​
    String name;
    int age;
​
    /**
     * 在一个类的构造方法中,如果没有显式地调用其他构造器,则Java虚拟机会默认调用super()来调用父类的无参构造器
     * 如果显式地调用了某个构造器,则Java虚拟机不再调用父类的无参构造
     * 在构造方法内部,如果要调用其他构造方法,则该调用必须写在方法的第一行
     */
    public Son(){
        this(18);
        System.out.println("this is son Constructor without params");
    }
​
    public Son(int age){
        this(18, "wumingshi");
        System.out.println("this is son Constructor with age");
    }
​
    public Son(int age, String name){
        super();
        System.out.println("this is son Constructor with age and name");
    }
}
package com.saas.oo2;
​
public class Son extends Father{
​
    String name;
    int age;
​
    /**
     * 在一个类的构造方法中,如果没有显式地调用其他构造器,则Java虚拟机会默认调用super()来调用父类的无参构造器
     * 如果显式地调用了某个构造器,则Java虚拟机不再调用父类的无参构造
     * 在构造方法内部,如果要调用其他构造方法,则该调用必须写在方法的第一行
     */
    public Son(){
        this(18);
        System.out.println("this is son Constructor without params");
    }
​
    public Son(int age){
        this(18, "wumingshi");
        System.out.println("this is son Constructor with age");
    }
​
    public Son(int age, String name){
        super();
        System.out.println("this is son Constructor with age and name");
    }
}

通过Son类中构造器的调用我们发现:

即使在子类的内部构造方法中调用了当前类的其他构造器,但是总有一个方法会调用其父类的构造器

所以在创建任何子类对象时,都会直接或者间接调用父类的构造器

继承中的对象创建

package com.saas.oo3;
​
public class Father {
​
    int a;
    int b;
    public void m1(){
        System.out.println("this is m1 in Father");
    }
}
package com.saas.oo3;
​
import com.saas.oo2.Father;
​
/**
 * 在具有继承关系的对象创建中,构建子类对象会先执行父类的构造器,但是不一定会创建父类对象
 * 由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象
 * 所以Son所持有的成员属性和方法有:
 *  int a
 *  int b
 *  int c
 *  m1()
 *  m2()
 */
public class Son extends Father {
​
    int c;
​
    public void m2(){
        System.out.println("this is m2 in Son");
    }
}
package com.saas.oo3;
​
public class Test {
​
    public static void main(String[] args) {
        new Son();
    }
}

通过new关键字创建的Son对象,只会创建一个Son类型的对象,并不会创建Father的对象本身,只是借助Father构造器来初始化该Son对象本身

继承后的对象创建

package com.saas.oo4;
​
/**
 *如果直接new C()的构造器,则分别会执行A的构造器,B的构造器,以及C自己的构造器
 * super()表示调用父类无参构造方法
 * 如果没有显式的书写,隐式的存在于子类构造器的第一行
 * 所以最终的运行结果时
 * A()
 * B()
 * C()
 * 但是注意,虽然分别走了A和B的构造器,但是并不会真正创建A和B对象,走A和B的构造器的目的时为了初始化C对象
 */
public class Test {
​
    public static void main(String[] args) {
        new C();
    }
}

继承小结

super关键字的第一种用法:

  • 在子类中使用“super.”的形式访问父类的属性和方法

  • 例如: super.money, super.test(),分别调用父类中的money属性和test()方法

super的第二种用法:

  • 在子类的构造器第一行,使用super()或者super(实参),调用父类的构造方法

注意:

  • 如果子类构造方法中,没有显式的定义super()或者super(形参),则默认提供super();

  • 在构造方法内部,调用其他的构造方法,该调用代码必须写在第一行

  • 同一个子类构造方法中,super()、this()不可能同时存在

多态

概念

一个事物的多种形态

生活中:不同人物角色看待同一个对象的视角不同,关注点也不相同

生活中的多态是指“客观事物在人脑中的主观反应”

主观意识上的类别与客观存在的对象之间具有“is a”的关系时,即形成多态

程序中的多态:

概念:父类引用指向子类对象,从而产生多种形态

package com.saas.oo5;
​
public class Animal {
​
    String breed;
​
    int age;
​
    public void eat(){
        System.out.println("eatting...");
    }
​
    public void sleep(){
        System.out.println("sleeping...");
        System.out.println("zzzzzZZZZZZZ");
    }
}
package com.saas.oo5;
​
public class Sheep extends Animal{
​
    public void miemie(){
​
    }
}
package com.saas.oo5;
​
public class Wolf extends Animal{
​
    
}
package com.saas.oo5;
​
public class Test {
​
    public static void main(String[] args) {
        Animal s = new Sheep();
        Animal w = new Wolf();
​
        s.age = 4;
        s.breed = "mianyang";
​
        System.out.println(s.age);
        System.out.println(s.breed);
​
        s.eat();
        s.sleep();
        //s.miemie();     //  miemie()是Sheep这个类所特有的方法,不能通过Animal类型的s来调用
​
        System.out.println("================");
    }
}

二者具有直接或者间接的继承关系时,父类引用指向子类对象,即形成多态

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法

多态中的方法重写

思考:如果子类中重写了父类的方法,以父类类型的引用调用此方法时,优先执行的是父类的方法还是子类中的方法

实际运行过程中,依照重写的原则,如果子类重写了父类中的方法,执行子类中重写后的方法,否则如果没有重写,完全继承的话,则执行的是父类中的方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESCTF-逆向赛题WP

ESCTF_reverse题解 逆吧腻吧babypybabypolyreeasy_rere1你是个好孩子完结撒花 Q_W_Q 逆吧腻吧 下载副本后无壳,直接拖入ida分析分析函数逻辑:ida打开如下:提取出全局变量res的数据后,编写异或脚本进行解密: a[0xBF, …

matlab和stm32的安装环境。能要求与时俱进吗,en.stm32cubeprg-win64_v2-6-0.zip下载太慢了

STM32CubeMX 6.4.0 Download STM32CubeProgrammer 2.6.0 Download 版本都更新到6.10了,matlab还需要6.4,除了st.com其他地方都没有下载的,com.cn也没有。曹 还需要那么多固件安装。matlab要求制定固件位置,然后从cubemx中也指定…

python3游戏GUI--开心打地鼠游戏By:PyQt5(附下载地址)

文章目录 一.前言二.游戏预览1.启动2.开始游戏3.游戏结束4.排行榜 三.游戏思路四.总结 一.前言 第一次用PyQt做游戏,有点小紧张呢。本次使用PyQt5制作一款简单的打地鼠游戏,支持基本游戏玩法、…

本地部署大模型的几种工具(下-相关比较)

比较项目chatglm.cppvllmOllamalmstudio功能特点通过C优化性能,支持多平台运行推理加速简化易用、本地运行大模型简化操作、本地运行大模型操作系统要求都可以,linux下运行更方便都可以,linux下运行更方便都可以,windows目前还是预…

2024华为产业链企业名单大全(附下载)

更多内容,请前往知识星球下载:https://t.zsxq.com/18fsVdcjA 更多内容,请前往知识星球下载:https://t.zsxq.com/18fsVdcjA

利用 Scapy 库编写 ARP 缓存中毒攻击脚本

一、ARP 协议基础 参考下篇文章学习 二、ARP 缓存中毒原理 ARP(Address Resolution Protocol)缓存中毒是一种网络攻击,它利用了ARP协议中的漏洞,通过欺骗或篡改网络中的ARP缓存来实施攻击。ARP协议是用于将IP地址映射到物理MAC…

【Leetcode每日一题】 动态规划 - 解码方法(难度⭐)(43)

1. 题目解析 题目链接:91. 解码方法 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 这是一道类似斐波那契数列的题目~ 当我们遇到一个类似斐波那契数列的问题时,我们通常会想到使用动态规划&…

网络安全学习路线(2024)

国家和企业越来越重视网络安全了,现在也有很多很厂商加招网络安全岗位,同时也有很多对网络安全感兴趣的朋友,准备转行或从事网络安全。 通常,网络安全的内容包括: 网络安全技术、网络安全管理、网络安全运作&#xff…

【MySQL数据库】数据类型和简单的增删改查

目录 数据库 MySQL的常用数据类型 1.数值类型: 2.字符串类型 3.日期类型 MySQL简单的增删改查 1.插入数据: 2.查询数据: 3.修改语句: 4.删除语句: 数据库 平时我们使用的操作系统都把数据存储在文件中&#…

谷歌关键词优化十招搞定提升你的存在感-华媒舍

在当今的数字化时代,谷歌已成为我们生活中不可或缺的一部分。作为世界上最大的搜索引擎之一,谷歌每天处理着海量的搜索请求。要在谷歌上获得更多的曝光和存在感,关键词优化是必不可少的。本文将向您介绍十招搞定谷歌关键词优化的方法&#xf…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述: 一个机器人位于一个 m x n 网格的左上角 ,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径? 思路: 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

web自动化测试系列-selenium的安装和运行(一)

目录 web自动化系列之如何安装selenium 1.web自动化中的三大亮点技术 2.web自动化能解决什么问题 ? 3.为什么是selenium ? 4.selenium特点 5.selenium安装 6.下载浏览器及驱动 7.测试代码 web自动化系列之如何安装selenium web自动化 ,一个老生…

【No.17】蓝桥杯图论上|最短路问题|Floyd算法|Dijkstra算法|蓝桥公园|蓝桥王国(C++)

图的基本概念 图: 由点(node,或者 vertex)和连接点的边(edge)组成。图是点和边构成的网。 树:特殊的图树,即连通无环图树的结点从根开始,层层扩展子树,是一种层次关系,这种层次关系&#xff0…

【C++】哈希应用之位图

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.位图的概念 2.位…

一道很有意思的题目(考初始化)

这题很有意思,需要你对初始化够了解才能解出来 ,现在我们来看一下吧。 这题通过分析得出考的是初始化。关于初始化有以下知识点 (取自继承与多态(继承部分)这文章中) 所以根据上方那段知识点可知&#xf…

【linux网络(一)】初识网络, 理解四层网络模型

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux网络 1. 前言2. 初识网络…

【Java程序设计】【C00361】基于Springboot的考勤管理系统(有论文)

基于Springboot的考勤管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及idea&…

RWTH-PHOENIX Weather数据集模型说明和下载

RWTH-PHOENIX Weather 2014 T数据集说明: 德国公共电视台PHOENIX在三年内(2009 年至 2011 年) 录制了配有手语翻译的每日新闻和天气预报节目,并使用注释符号转录了 386 个版本的天气预报。 此外,我们使用自动语音识别和手动清理来转录原始德语语音。因此,该语料库允许训练…

电脑控制面板在哪?5招教你快速打开!

“我在执行一个任务时要进入电脑的控制面板中查看,但是我不知道电脑的控制面板在哪,谁能帮帮我呀?” 电脑控制面板是一个系统文件夹,它提供了各种对计算机系统进行设置和管理的工具。控制面板允许用户查看并操作基本的系统设置&am…

SAP ABAP-BOPF基础训练-01简介与架构

1. 介绍-Introduction ① BOPF是什么?BOPF(the Business Object Processing Framework):业务对象处理框架 提供了一种增量和模块化的方法,以符合企业面向服务体系结构(eSOA)的方式实现业务对象; 部分平台基础层,软件组…