Java面试题之方法重载和重写的区别

直接上干货!!!

  • 什么时候考虑使用方法重载overload?
    • 当一个类当中,如果功能相似的话,建议将名字定义的一样,这样代码美观,并且方便编程
  • 什么条件满足之后能构成方法重载overload?
    • 条件一:在同一个类中
    • 条件二:方法名相同
    • 条件三:参数列表不同(个数、顺序类型)
  • 我自己的理解:
    • overload的意思就是重载
    • 最直接的方法重载其实是我们的有参无参构造方法,名字是一样的,然后有参数和没有参数,或者有三个属性,但是我们创建对象的时候需要两个参数,也可以用方法重载,然后来实现一个代码的复用,想用哪个方法,就传不同的参数
    • 可以看到下面的程序,就是一个典型的方法重载,根据new对象的时候,传入的参数不同而自动的去调用不同的构造方法。
    • public class StringTest {
      
          private int id;
          private String name;
          private String password;
      
          public StringTest() {
              System.out.println("调用了无参数构造方法");
          }
      
          public StringTest(int id, String name, String password) {
              System.out.println(id+","+name+","+password+"调用了三个参数的构造方法");
              this.id = id;
              this.name = name;
              this.password = password;
          }
      
          public StringTest(int id, String name) {
              System.out.println(id+","+name+","+"调用了两个参数的构造方法");
              this.id = id;
              this.name = name;
          }
      
      
          public static void main(String[] args) {
              StringTest s1 = new StringTest();
              StringTest s2 = new StringTest(1,"肉鸡","6666");
              StringTest s3 = new StringTest(2,"shy哥");
          }
      }

  •  方法重写/覆盖/Override

    • 什么时候考虑方法覆盖?
      • 子类继承父类之后,当继承过来的方法无法满足当前子类的业务需要的时候,子类有权利对这个进行重新编写,有必要进行"方法的覆盖"
    • 重要结论:
      • 当子类对父类继承过来的方法进行"方法覆盖"之后,子类对象调用方法的时候,一定执行覆盖之后的方法
    • 当我们代码怎么编写的时候,在代码级别上构成了方法覆盖呢?
      • 条件一:两个类必须要有继承关系
      • 条件二:重写之后的方法和之前的方法具有:(相同的返回值类型、相同的方法名、相同的形式参数列表)
      • 条件三:访问权限不能更低,可以更高(可以去看一些public、private、protected的权限问题)
      • 条件四:重写之后的方法不能比之前的方法抛出更多的异常,可以更少(比如父亲抛出了RuntimeException那么子类就不能抛Exception)
    • 几点注意事项:
      • 注意一:方法覆盖只是针对于方法,和属性无关
      • 注意二:私有方法无法覆盖
      • 注意三:构造方法不能被继承,所以构造方法也不能被覆盖
      • 注意四:方法覆盖只是针对于"实例方法","静态方法覆盖"没有意义
      • 为什么说静态方法覆盖没有意义
        • 静态方法本来就是类名点. 的方法是调用,比如说你猫子类继承了动物父类,把父类的方法给覆盖了,那静态方法调用用类名,调用动物父类就用动物的类名,调用猫的就用猫类的类名去调用,所以对于静态方法来说方法覆盖没有意义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java+每天进步亿点点

一起学习一起进步一起高薪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值