Java中的 重写与重载(转载)
原文出处:https://blog.csdn.net/dingliang33608/article/details/69062405/
重载:
在java中,同一个类中两个或者两个以上的方法可以共享一个名称,只要它们的参数声明不同即可,这种情况称为方法的重载。
方法的重载分为 构造方法和普通方法的重载,方法的重载是java多态性的体现之一。
例如,在JDK的java.io.PrintStream中定义了十多个同名的pringln()方法。
public void println(int i){ …..}
public void println(double i){ …..}
public void println(String i){ …..}
这些方法完成的功能类似,都是格式化的输出,根据参数的不同来区分他们,以进行不同的格式化处理和输出,它们之间就构成了方法的重载,实际调用时,根据实参的类型来决定调用哪个方法。
例如:
System.out.println(102); //调用方法 public void println(int i)
System.out.println(102.25); //调用方法 public void println(double i)
System.out.println(“102.25”); //调用方法 public void println(String i)
方法重载时,必须注意一下几点:
-
在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
-
各个重载方法的参数列表必须不同
-
各个重载方法的返回值类型可以相同也可以不同,但是仅仅返回值类型不同的不是重载 (各个重载方法的参数列表必须不同)例如:
public void change(int i){} 与 public int change(int i){}
不能成为方法的重载 -
不能通过仅仅通过访问权限、返回类型、抛出的异常的不同而进行进行重载
重写:
当一个类继承另一个类时,则可以拥有父类的成员方法和成员变量,在子类中,可以创建独有的成员,如果创建了一个与父类中相同名称,相同返回类型、相同参数列表的方法,只是方法体中的实现方法不同,以实现不同于父类的功能,这种方式就称为方法的重写,又称为方法的覆盖。
在重写方法时候,应该遵循以下规则:
-
参数列表必须完全和被重写方法的参数列表一致
-
返回类型必须完全和被重写方法的返回类型一致
-
访问修饰符的限制一定要大于或等于被重写方法的访问修饰符
(public>protected>default>private)(子类能够继承父类的public和protected修饰的方法和属性,如果子类和父类在同一个package下子类可以继承父类的默认方法和属性。如果子类定义了和父类一样的属性,则父类的属性被隐藏)
-
重写的方法一定不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常,子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
例如:父类的方法中声明了一个检查异常 IOException,在重写这个方法时候,就不能抛出Exception,只能抛出IOException的字类异常,可以抛出非检查类的异常。