直接上干货!!!
- 什么时候考虑使用方法重载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)
- 几点注意事项:
- 注意一:方法覆盖只是针对于方法,和属性无关
- 注意二:私有方法无法覆盖
- 注意三:构造方法不能被继承,所以构造方法也不能被覆盖
- 注意四:方法覆盖只是针对于"实例方法","静态方法覆盖"没有意义
- 为什么说静态方法覆盖没有意义
- 静态方法本来就是类名点. 的方法是调用,比如说你猫子类继承了动物父类,把父类的方法给覆盖了,那静态方法调用用类名,调用动物父类就用动物的类名,调用猫的就用猫类的类名去调用,所以对于静态方法来说方法覆盖没有意义
- 什么时候考虑方法覆盖?