Day34--方法的重写

news/2024/12/26 13:30:58/文章来源:https://www.cnblogs.com/xiaokunzhong/p/18556646

Day34--方法的重写

override 重写

重写是方法的重写,和属性无关

示例:

创建下面三个java文件,并在A.java B.java里面创建方法,Application里面初始化A并引用test方法

​ A类是B类的子类

package com.liu.oop.demo05;public class A extends B{public static void test(){System.out.println("A=>test()");}
}
package com.liu.oop.demo05;public class B {public static void test(){System.out.println("B=>test()");}}
package com.liu.oop;import com.liu.oop.demo05.A;
import com.liu.oop.demo05.Person;
import com.liu.oop.demo05.Student;public class Application {public static void main(String[] args) {A a = new A();a.test();//A=>test()}
}

然后注意,操作来了

package com.liu.oop;import com.liu.oop.demo05.A;
import com.liu.oop.demo05.B;
import com.liu.oop.demo05.Person;
import com.liu.oop.demo05.Student;public class Application {public static void main(String[] args) {A a = new A();a.test();//A=>test()B b=new A();b.test();//B=>test()}
}

B b = new A ();” 在这段代码中创建了一个A类的对象,并使用B类型的引用变量来引用这个对象.

父类的引用可以指向子类的对象,因为子类拥有父类的所有特性并且可能还有更多的特性。例如 “B b = new A ();” 是合理的,因为 A 对象可以被视为一个特殊的 B 对象来对待。

同时,在静态方法下,B b = new A (); 方法的调用只和左边定义的数据类型有关

此时,将A、B类的方法中的ststic都去掉(必须保持一致,要去掉都去掉)

package com.liu.oop.demo05;public class A extends B{public  void test(){System.out.println("A=>test()");}
}
package com.liu.oop.demo05;public class B {public  void test(){System.out.println("B=>test()");}}

此时可以看到,在A编译区的左侧,有image

(两个相同圆心的同心圆,右上角有一个向上的红色箭头)的图形,这是方法重写的标志

在B编译区的左侧,有image-20241120124737926

(两个相同圆心的同心圆,右下角有一个向下的黑色箭头)的图形,这是方法被重写的标志

详细解释:

以下是对这两个提示的解释:

  1. “在以下位置重写方法 B(com.liu.oop.demo05)”:

    • 这是针对 A 类中的 public void test(){ System.out.println("A=>test()"); } 这句代码的提示。
    • 意思是当前这个方法在 A 类中重写了其父类 B(位于包 com.liu.oop.demo05)中的 test 方法。当一个子类定义了与父类同名、同参数列表的方法时,就被认为是重写了父类的方法。在这里,A 类继承自 B 类,并且 A 类中的 test 方法与 B 类中的 test 方法具有相同的方法名和无参数的特点,所以 IDEA 识别出这是一个重写的操作,并给出这个提示,以便开发者明确知道这个方法是对父类特定方法的重写。
  2. “在以下位置被重写 A(com.liu.oop.demo05)”:

    • 这是针对 B 类中的 public void test(){ System.out.println("B=>test()"); } 这句代码的提示。
    • 它表示这个方法在 B 类中定义,但在其子类 A(位于包 com.liu.oop.demo05)中被重写了。这个提示也是为了帮助开发者快速了解方法的继承和重写关系,当查看 B 类的这个方法时,能立即知道它在哪个子类中被重写了。

方法重写只和非静态有关

此时,我们可以将A里面的方法删除,然后用Alt+Insert---->方法重写

package com.liu.oop.demo05;public class A extends B{@Overridepublic void test() {super.test();}
}

其中,@Override 是注解;有功能的注释

super.test(); 默认调用父类的方法,我们也可以改为自己的内容

package com.liu.oop.demo05;public class A extends B{@Override  //注解;有功能的注释public void test() {System.out.println("A=>test()");}
}

但是,这时候Application的输出结果发生改变

package com.liu.oop;import com.liu.oop.demo05.A;
import com.liu.oop.demo05.B;
import com.liu.oop.demo05.Person;
import com.liu.oop.demo05.Student;public class Application {public static void main(String[] args) {A a = new A();a.test();//A=>test()//父类的引用指向了子类B b=new A();b.test();//A=>test()}
}

可见,静态方法和非静态方法差别很大!!!!!!!!!!!!!!!

再将A B里面方法的public改成private

package com.liu.oop.demo05;public class A extends B{private void test() {System.out.println("A=>test()");}
}
package com.liu.oop.demo05;public class B {private   void test(){System.out.println("B=>test()");}}

在装订线附近,没有了方法重写的图标了

可见,方法重写的前提之一是在public公开

总结:

重写:需要有继承关系,子类重写父类的方法!

  1. 方法名必须相同。

  2. 参数列表必须相同。

  3. 修饰符:范围可以扩大。比如,父类的方法修饰符是private,子类可以是范围更大的public。但是,反过来不行

    ​ 范围大小:public> Protected > Default > private

  4. 抛出的异常,可以被缩小,不能被扩大

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享三个选股思路: 元宝底、多维共振、短线金叉

分享三个选股思路: 元宝底、多维共振、短线金叉 作者: 深海游鱼 QQ:396068801 日期:2024年11月 1.元宝底:三条短线快速形成金叉时,是短线追涨买点。 2. 多维共振: 最价金叉+Macd水上金叉,也是短线买点,如果能回踩接人更好。 3. 短线金叉: 三条短期均线聚拢,首日形…

(1)环境准备

前言 暑假趁着打折买的7020,一直到现在(2024年11月20日12:56:06)才打开,然后今天心血来潮准备那驱动啥的都捯饬一下,顺便这几天再看一看有些操作,免得后面用的时候才临时去弄 设备连接 如下图,很方便,直接一根type-c线就搞定了,因为这玩意的下载器直接集成在开发板上了…

SUMO文档阅读——PlainXML

Tutorials https://sumo.dlr.de/docs/Tutorials/index.html net.xml (道路设置) 和 route.xml (车类型设置 + 车流量设置) + .sumocfg (综合前两个xml文件) 十字路口的例子 https://sumo.dlr.de/docs/Networks/PlainXML.html Tools https://sumo.dlr.de/docs/Tools/#tools_by_…

大学减负小技巧

一切仅供学习研究参考。 方法有很多,这里只提供本人认为最方便的手段。 一.脚本刷网课 以Edge浏览器,超星学习通为例 1. 下载脚本管理器,这里使用篡改猴 (Tampermonkey)第二个,下载安装,并固定到工具栏 2.下载合适的脚本,这里推荐这个extension://iikmkjmpaadaobahmlepel…

国产数据库oceanBbase,达梦,金仓与mysql数据库的性能对比 一、比对方法和结果

最近调研了三款国产化数据库与mysql做对比,调研主要性能指标是大数据写入速度、大数据读取速度以及是否支持分表。 一、测试结果 测试结果与预期的差别很大 1、先说oceanBase社区版这款数据库官网上描述性能非常好,感觉可以秒杀mysql,但实际测试结果单节点的情况下,和…

Moebius for SQL Server

Moebius(莫比斯)介绍 Moebius数据库多活集群是格瑞趋势为SQL Server数据库研发的能够同时满足可用性、数据安全、容灾、读写分离、负载均衡的一站式多活集群。集群的名字取自Moebius环,寓意无限扩展。Moebius采用“share nothing”架构,每个节点的SQL Server服务独立安装,…

母亲的回头

写在前面392 字 | 亲情 | 思考 | 陪伴 | 细节 | 情感 | 感触 | 体验 | 时间正文等车。我说,自己一个人就可以了,都等,空耗两个人的时间。母亲不肯。司机迟到了十多分钟。这过程中,母亲很焦急。我上了车。母亲敲了敲司机的车窗。司机将窗摇下来,听见她问收不收现金。司机点…

[68] (NOIP集训) NOIP2024 加赛 5

恐将成为我改题时间最长的一场(也是分最低的一场)码长断崖式领先了 flowchart TBA(暴力操作)style A color:#ffffff,fill:#00c0c0,stroke:#ffffff 首先你肯定要让小于(等于)中位数的数变小,将较大的值变小是毫无意义的,因为即使你完全不管他们,也不会对答案造成任何影响…

考研打卡(23)

开局(23) 开始时间 2024-11-20 11:07:52 结束时间 2024-11-20 12:01:50十一点醒了数据结构已知 10 个元素 (54,28,16,34,73,62,95,60,26,43) , 按照依次插入的方法生成一棵二叉排序树,查找值为 62 的结点所需比较次数为_____(复旦大学 2014年) A 2 B 3 C 4 D 5B…

apache直接打印php代码或直接下载问题

在/etc/httpd/conf/httpd.conf中的添加圈出的代码:下载问题,直接执行,然后重启apache: yum install mod_php

Java易混知识点列表比较

前前后后遇到了一些容易混淆的知识点,特地做了表格专栏捋清思路类一级成员与实例成员类一级成员 实例成员属于 类本身 类创建的实例对象举例 static(变量/方法/初始化块)、内部类 普通成员直接访问 类名.member 对象.memberclass superc{int i=5;void show(){System.out.pri…

新兴数据仓库设计与实践手册:从分层架构到实际应用(二)

本手册将分为三部分发布,以帮助读者逐步深入理解数据仓库的设计与实践。第一部分介绍数据仓库的整体架构概述; 第二部分深入讨论ETL在数仓中的应用理论,ODS层的具体实现与应用; 第三部分将围绕DW数据仓库层、ADS层和数据仓库的整体趋势展开;通过这样的结构,您可以系统地学…