• 【JavaSE】重载和重写


    前言:

    作者简介:爱吃大白菜1132

    人生格言:纸上得来终觉浅,绝知此事要躬行

     

    如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

     

    如果觉得博主文章还不错的话,希望三连支持!

    目录

    重载(Overload)

    重写 (override)

    重载和重写的区别 


    重载(Overload)

            概念:简单的说,方法名字相同,参数列表不同,返回值可相同也可不同(无要求),当我们调用这个函数时,传参不同,编译器就会依照传参的类型,调用对应的方法。

    代码示例:

    1. public static int add(int x, int y) {
    2. return x + y;
    3. }
    4. public static double add(double x, double y) {
    5. return x + y;
    6. }
    7. public static double add(double x, double y, double z) {
    8. return x + y + z;
    9. }
    10. public static void main(String[] args) {
    11. int a=add(1, 2); // 调用add(int, int)
    12. System.out.println(a);
    13. double b=add(1.5, 2.5); // 调用add(double, double)
    14. System.out.println(b);
    15. double c=add(1.5,2.5, 3.5); // 调用add(double, double, double)
    16. System.out.println(c);
    17. }

     当满足以下条件时才构成方法重载

    • 方法名必须相同
    • 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
    • 与返回值类型是否相同无关
    • 编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

    重写 (override)

            概念:重写也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

     代码示例:

    1. class shape {
    2. public void draw() {
    3. System.out.println("画形状");
    4. }
    5. }
    6. class triangle extends shape {
    7. @Override//注解
    8. public void draw() {
    9. System.out.println("画三角形");
    10. }
    11. }
    12. class rectangle extends shape {
    13. @Override//注解
    14. public void draw() {
    15. System.out.println("画矩型");
    16. }
    17. }
    18. class dog extends shape {
    19. @Override
    20. public void draw() {
    21. System.out.println("画一个小狗 🐕");
    22. }
    23. }
    24. public class Test_11_13 {
    25. public static void main(String[] args) {
    26. shape[] s = {new triangle(), new rectangle(), new dog()};//向上引型
    27. for (int i = 0; i < s.length; i++) {
    28. s[i].draw();
    29. }
    30. }
    31. }

    代码运行结果:

    观察代码可以发现,当我们调用draw()方法时,输出的信息并不是我们在父类中编写的draw()方法中的信息,而是我们在他子类中编写的同名的draw()方法输出的信息,这就是子类中的draw()方法对父类中的draw()方法进行了重写。

            重写的注意事项:

    •  子类在重写父类的方法时,必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致。
    • 被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
    • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected。
    • 父类被static、private修饰的方法、构造方法都不能被重写。
    • 重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 darw), 那么此时编译器就会发现父类中没有darw方法, 就会编译报错, 提示无法构成重写。

    重载和重写的区别 

    区别点重写 (override)重载(Overload)
    参数列表一定不能修改必须修改
    返回类型一定不能修改【除非可以构成父子类关系】可以修改
    访问限定符一定不能做更严格的限制(可以降低限制)可以修改
  • 相关阅读:
    Git实战技巧-查看不同版本之间的差异和代码的改动
    RGB格式
    .NET Core 使用Swagger给控制器分组
    使用C++界面框架ImGUI开发一个简单程序
    编译一日一练(DIY系列之汇编输出)
    Rustdesk安装教程
    Mysql—数据库操作
    (178)Verilog HDL:设计一个计数器之exams/ece241_2014_q7a
    [NOIP2001 普及组] 最大公约数和最小公倍数问题
    ue5 lyra的角色动画系统 持续更新中。。。。
  • 原文地址:https://blog.csdn.net/qq_65228171/article/details/127837089