7.11 Java方法重写

news2024/9/28 7:18:30

7.11 Java方法重写

这里首先要确定的是重写跟属性没有关系,重写都是方法的重写,与属性无关

  1. 带有关键字Static修饰的方法的重写实例

    父类实例

    package com.baidu.www.oop.demo05;
    
    public class B {
        public static void test(){
            System.out.println("这是父类方法的重写");
        }
    }
    

    子类实例

    package com.baidu.www.oop.demo05;
    
    public class A extends B{
        public static void test(){
            System.out.println("这是子类方法的重写");
        }
    }
    

    主程序实例

    package com.baidu.www.oop;
    
    import com.baidu.www.oop.demo05.A;
    import com.baidu.www.oop.demo05.B;
    
    public class Application {
        public static void main(String[] args) {
            A a = new A();
            a.test();
            //父类的引用指向了子类
            B b = new A();
            b.test();
            /*
            * 这里new的都是A但是输出结果不同
            * a.test()调用的是A类中的静态方法
            * b.test()调用的是B类中的静态方法
            * A类与B类之间又有继承关系
            * 有了继承关系在new A()的时候,子类是可以指向父类的
            * 也就是B b = new A()中父类的引用b可以指向子类
            * 因为类型之间可以转化
            * 在这个实例中我们也能看出,方法的调用只跟等号左边的类有关
            * 也就是定义的数据类型有关
            * 也就是与右边的new A()没有什么关系*/
        }
    }
    /*
    * 这是子类方法的重写
    这是父类方法的重写
    
    Process finished with exit code 0*/
    
  2. 不带Static关键字的方法的重写

    在IDEA中可以使用alt+insert快捷键实现快速插入方法的重写如图

    快捷键

    选择相应的父类方法可以重写,同时在方法上会自动生成一个注解

    @Override//注解跟注释一样,只不过这是一个又功能的注释
        public void test1() {
            super.test1();//默认调用父类的方法
        }
    }
    

    Override就是重写的意思,生成的重写的方法默认的是调用父类的方法。

    不带Static关键字修饰的父类实例

    package com.baidu.www.oop.demo05;
    
    public class B {
        public static void test(){
            System.out.println("这是父类static修饰的方法的重写");
        }
        public void test1(){
            System.out.println("这是父类没有static修饰的方法的重写");
        }
    
    }
    

    不带Static关键字修饰的子类实例

    package com.baidu.www.oop.demo05;
    
    public class A extends B{
        public static void test(){
            System.out.println("这是子类static修饰的方法的重写");
        }
    
        @Override
        public void test1() {
            System.out.println("这是子类没有static修饰的方法的重写");
        }
    }
    

    不带Static关键字修饰的主程序实例

    package com.baidu.www.oop;
    
    import com.baidu.www.oop.demo05.A;
    import com.baidu.www.oop.demo05.B;
    
    public class Application {
        public static void main(String[] args) {
            A a = new A();
            a.test();
            a.test1();
            //父类的引用指向了子类
            B b = new A();
            b.test();
            b.test1();
            /*
            * 这里new的都是A但是输出结果不同
            * a.test()调用的是A类中的静态方法
            * b.test()调用的是B类中的静态方法
            * A类与B类之间又有继承关系
            * 有了继承关系在new A()的时候,子类是可以指向父类的
            * 也就是B b = new A()中父类的引用b可以指向子类
            * 因为类型之间可以转化
            * 在这个实例中我们也能看出,关键字static修饰的静态方法的调用只跟等号左边的类有关
            * 也就是定义的数据类型有关,就像double i = 1;虽然赋值了整型,但是数值类型还是double
            * 也就是与右边的new A()没有什么关系*/
        }
    }
    /*
    这是子类static修饰的方法的重写
    这是子类没有static修饰的方法的重写
    这是父类static修饰的方法的重写
    这是子类没有static修饰的方法的重写
    
    
    Process finished with exit code 0*/
    

    从运行结果可以看出没有Static关键字修饰的方法的重写,虽然B b= new A();但是用Static关键字修饰的test()方法重写的调用是调用的父类的方法,而没有Static关键字修饰的test1()方法则是调用了子类的方法的重写。这里我们就得出一个结论静态方法与非静态方法是有区别的,没事的时候不要写一些静态的方法去玩,如果是使用了Static修饰的静态方法是与左边的定义类型有关的,而么有Static修饰的非静态方法则是与右侧赋值的方法有关,这也就是子类重写了父类的方法

    这里一定要注意重写只与非静态的方法有关,与静态方法没有关系,因为静态方法在类加载的时候就已经进入内存。而且重写方法的关键词也必须是public修饰的。

    这里我们也看出方法的重写与父类的方法名一模一样,只是实现的代码不同,与重载不同的是

    1. 重载是在同一个类中的,而重写则是在父类与子类之间的
    2. 重载是同一个类中的同一方法名但参数不同,而重写则是在不同类中的同一方法,只不过实现代码也就是方法体不同
    重写:前提:必须要有继承关系,而且是子类重写父类的方法!
    1.方法名必须相同
    2.参数列表必须相同
    3.修饰符:范围可以扩大,但是不能缩小,比如父类如果是一个Private私有类型的,假设可以被继承,那么子类可以写成public的,但是如果父类是public的子类重写时不能变成Private的类型。这里修饰符的优先级public > protected > default > private,也就是范围可以扩大但是不能缩小。
    4.抛出的异常:重写可能会抛出异常,异常的范围可以被缩小,但不能扩大,这与方法重写修饰符刚好相反,也就是子类本身是继承父类的方法,如果抛出异常,只在子类中抛出异常就行,不能再连累父类。
    
  3. 为什么需要重写

    1. 生活中我们经常遇到父类的功能子类不一定需要或者不一定满足,父类中方法实现功能太多了,子类只需要少部分即可满足,或者父类太简单了,不能满足子类的,所以就需要子类重写父类的方法。

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

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

相关文章

CLion 创建Qt工程

环境 CLion :2019.3.6 Qt :5.9.6(MinGW) Clion 配置 编译环境配置 添加Qt MinGW编译环境 添加Qt工具 创建工程 正常创建C工程 CMakeLists cmake_minimum_required(VERSION 3.8) project(QtApp)set(CMAKE_CXX_STANDARD 11)…

APB register脚本

[github repo]根据Excel表格自动生成寄存器RTL/RALF/C header的脚本 - wudayemen - 博客园 (cnblogs.com) 在芯片设计中,常常会使用APB总线配置每个模块的寄存器。这一部分可以使用脚本生成相应RTL代码和对应的验证所需文件比如RALF,和C语言的头文件&am…

【仿写tomcat】三、通过socket读取http请求信息

仿写tomcat 建立Socket连接获取连接信息查看HTTP信息 建立Socket连接 这里我们也是创建一个专门管理socket的类 package com.tomcatServer.socket;import java.io.*; import java.net.ServerSocket;/*** 套接字存储** author ez4sterben* date 2023/08/15*/ public class Soc…

电影《孤注一掷》观后感

上周看了电影《孤注一掷》,看完后,内心久久无法平静,电影影响还是听深远的的。 (1)情感与金钱的损失 我们每个人,或多或少,都收到过,诈骗类的短信或者电话,只要你使用的智能手机&am…

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…

探究主成分分析方法数学原理

目录 1、简介 2、实现原理 3、实现步骤 4、公式分析 5、实例分析 6、⭐协方差矩阵补充说明 7、LaTex文本 ⭐创作不易,您的一键三连,就是支持我写作的最大动力!🥹 关于代码如何实现,请看这篇文章:[机器…

C++ string类相关用法实例

前言: 1 string是表示字符串的字符串类 2 string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数,所以string在底层实际是:basic_str…

【漏洞修复】OpenSSH-ssh-agent 越权访问CVE-2023-38408

CVE-2023-38408漏洞升级ssh版本 漏洞说明修复步骤RPM包编译 漏洞说明 漏洞名称:OpenSSH-ssh-agent 存在越权访问漏洞影响范围:ssh-agent(-∞, 9.3-p2) openssh(-∞, 9.3p2-1)漏洞描述:SSH-Agent是SSH的一部分,它是一个用于管理私…

设计模式之享元模式(Flyweight)的C++代码实现

1、享元模式提出 面向对象很好地解决了抽象问题,但是创建对象会带来一定的内存开销。绝大部分情况下,创建对象带来的内存开销是可以忽略不计的;在有些情况下是需要谨慎处理的,如类A的sizeof是50个字节,则创建50*1024*…

AIGC:从入门到精通

一、前言 相信一部分的人在看到本活动的主题是关于AIGC的时候,都会存在疑惑--到底什么是AIGC呢?故本文主要介绍关于AIGC的基本内容,全部内容采用自己搭建的ChatGPT模型生成,具体内容如下: 本文章,参与&…

互联网医院|申办互联网医院这些资质不能少

互联网医院作为一种创新的医疗模式,正在以其便捷、智能、人性化的特点改变着人们的生活方式和医疗体验。它以数字化技术和合作共赢的精神,打开了医疗的新纪元。让我们共同期待,互联网医院将为健康事业带来更多机遇和挑战,引领着健…

Spyglass 脚本

Spyglass小白可以使用Gui界面进行debug Spyglass检查(一)作为IC设计人员,熟练掌握数字前端语法检查工具Spyglass的重要性不言而喻,本文讲解景芯SoChttps://mp.weixin.qq.com/s/fp07o-AvaQvLT79Di0Tb7A 熟悉电路和软件之后可以使用脚本完成整个流程 sp…

【分享】使用FileChannel进行文件拷贝

前言: 项目实际编写中,使用到了多种文件拷贝方式,有包括专门使用c写了拷贝工具,供给Java调用,也有使用标准的输入输出流,这里分享的是借助 FileChannel 来读写,nio中传送数据使用channelbuffer,大的数据可以…

第九章 动态规划part09(代码随想录)

198.打家劫舍 题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。…

图的顺序存储结构

目录 图的顺序存储结构 图的顺序存储结构C语言实现 图的邻接表存储结构详解 邻接表计算顶点的出度和入度 图的十字链表存储结构 图的邻接多重表存储结构 图的顺序存储结构 使用图结构表示的数据元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储&a…

网络通信原理总结(第五十二课)

网络通信原理 结构目录 1 TCP/IP协议追层分析物理层(第三十九课)_IHOPEDREAM的博客-CSDN博客 2 网络通信TCP/IP协议逐层分析数据链路层(第四十课)_IHOPEDREAM的博客-CSDN博客 3 网络通信原理数据链路层&数制转换(第四十一课)_IHOPEDREAM的博客-CSDN博客 4 网络通信原理…

[LeetCode]矩阵对角线元素的和

解题 思路 1: 循环,找到主对角线的下标和副对角线的下标,如果矩阵长或宽为奇数的时候,需要减去中间公共的那一个值,中间公共的那个数的下标为mat[mat.size()/2][mat.size()/2]副对角线的下标为 mat [i][mat.size()-i-1] class Solution { public:int diagonalSum(vector<ve…

一文读懂|Linux 虚拟文件系统(VFS)

前言 虚拟文件系统是一个很庞大的架构&#xff0c;如果要分析的面面俱到&#xff0c;会显得特别复杂而笨拙&#xff0c;让人看着看着&#xff0c;就不知所云了&#xff08;当然主要还是笔者太菜&#xff09;&#xff0c;所以这篇博客&#xff0c;以 open() 函数为切入点&#…

2020年3月全国计算机等级考试真题(C语言二级)

2020年3月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 有以下程序 void fun1 (char*p) { char*q; qp; while(*q!\0) { (*Q); q&#xff1b; } } main() { char a[]{"Program"},*p; p&a[3]; fun1(p); print…

英语学习 Eudic欧路词典 for Mac

欧路词典是一款功能强大的英语学习工具&#xff0c;其多语种支持、海量词库、强大的翻译功能、听力训练和生词本和笔记等特点&#xff0c;使得用户可以方便地进行英语学习和提高英语水平&#xff0c;适用于各种英语学习人员和文化交流人员等不同人群。 1 、全面支持最新Retina…