java基础之方法重载(Overload)与方法覆盖(Override)

    科技2022-08-08  101

    1. 什么是方法重载?

    在同一个类中,如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。 因此,重载方法必须满足两个条件:

    方法名相同方法的参数类型、个数、顺序至少有一项不同(这部分属于参数签名)

    代码举例:

    public class Sample{ public void method(int i, String s){...} public void method(String s, int i){...} // 方法重载 public int method(int i, String s){...} // 不是方法重载,编译错误 public void method(int a, String ss){...} // 不是方法重载,编译错误 public void method(int i, String s, char ch){...} // 方法重载 public void method(char ch){...} // 方法重载 }

    2. 什么是方法覆盖?

    方法覆盖发生在父类与子类之间,如果在子类中定义的一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么子类的方法覆盖了父类的方法。 覆盖方法必须满足三个条件(约束):

    相比较方法重载,方法覆盖将返回类型也考虑进来,并要求子类的方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配。 public class Base{ public void method(){...} } public class Sub extends Base{ public int method(){... return 0} // 编译错误,返回类型不一致 } 子类方法不能缩小父类的访问级别 public class Base{ public void method(){...} } public class Sub extends Base{ private void method(){...} // 编译错误,子类方法缩小了父类方法的访问级别 } 子类方法不能抛出比父类方法更多的异常,即 子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子类。 public class Base1{ public void method() throws ArithmeticExecption{...} } public class Sub1 extends Base1{ public int method() throws NullPointerException{...} // 编译错误,子类与父类抛出的异常不同 } public class Sub2 extends Base1{ public int method() throws ArithmeticExecption,NullPointerException{...} // 编译错误,子类抛出更多的异常 } public class Base2{ public void method() throws Execption{...} } public class Sub3 extends Base2{ public int method() throws NullPointerException{...} // 方法覆盖,子类抛出的异常类是父类抛出异常类的子类 }

    3. 方法覆盖与方法重载的异同?

    有以下四点不同,若理解困难,请看上文

    方法重载发生在同一类中,方法覆盖发生在子类与父类之间。对于参数签名,方法覆盖要求必须一致,方法重载要求必须不一致。对于返回类型,方法覆盖要求必须一致,方法重载不做限制(一致、不一致都行)。对于访问级别和抛出异常,方法覆盖有特殊要求(参考上文),方法重载不做限制。
    Processed: 0.013, SQL: 8