7.11 Java方法重写

news/2025/2/13 22:42:35/

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修饰的方法的重写");}@Overridepublic 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.ppmy.cn/news/1037320.html

相关文章

iPhone删除的照片能恢复吗?不小心误删了照片怎么找回?

iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,具有极其重要的纪念价值。 照片不小心误删是一件非常难受的事,那么iP…

【项目设计】负载均衡式在线OJ

🌠 作者:阿亮joy. 🎆专栏:《项目设计》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉项目地址&am…

【制作npm包5】npm包制作完整教程,我的第一个npm包

制作npm包目录 本文是系列文章, 作者一个橙子pro,本系列文章大纲如下。转载或者商业修改必须注明文章出处 一、申请npm账号、个人包和组织包区别 二、了解 package.json 相关配置 三、 了解 tsconfig.json 相关配置 四、 api-extractor 学习 五、npm包…

不重启Docker能添加自签SSL证书镜像仓库吗?

应用背景 在企业应用Docker规划初期配置非安全镜像仓库时,有时会遗漏一些仓库没配置,但此时应用程序已经在Docker平台上部署起来了,体量越大就越不会让人去直接重启Docker。 那么,不重启Docker能添加自签SSL证书镜像仓库吗&…

Gin路由组

Gin路由组 文章目录 Gin路由组接收任意请求的路由接收没有被定义的路由路由组完整代码 接收任意请求的路由 区别于以往的GET()函数只能处理一种请求,Any()函数可以处理各种函数 语法: func (group *RouterGroup) Any(relativePath string, handlers ...HandlerFunc){} 案例: …

界面组件Telerik UI for WinForms R2 2023——拥有VS2022暗黑主题

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 Telerik UI for WinForms R2 2023于今年6月份发布&…

Android 10.0 增加多张图片作为系统静态壁纸的功能实现

1.前言 在10.0的系统开发中,在对系统的静态壁纸做定制的时候,需要增加几种静态壁纸可以让用户自己设置壁纸,所以可以在壁纸的系统应用中 添加几种静态壁纸图片,然后配置好 就可以在选择壁纸的时候,作为静态壁纸 2.增加多张图片作为系统静态壁纸的功能实现的核心类 pac…

css学习3(三种样式表与样式控制优先级)

1、外部样式表&#xff1a;当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。在使用外部样式表的情况下&#xff0c;你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表&#xff0c;也要放到<head>中。 2、外部…