overload(重载):
重载是在一个类里面,方法名相同,参数不同,返回类型可以相同也可以不同。
1.被重载的方法的参数列表必须不同(参数个数或类型不同,也可以是不同数据类型的参数的位置不同)
package test;public class demo05 {public void print(String name, int age) {System.out.println("name + age");}public void print(int age, String name) {System.out.println("age + name");}public static void main(String[] args) {demo05 d = new demo05();d.print("2",10);}}输出结果是:name + age
但是不能对print(int,int)类型的改变参数的顺序,因为改变前后方法结构没有改变。
2.被重载的方法可以改变返回值的类型,但是不能通过改变返回值的类型不同而实现重载
package test;public class demo05 {public String print(String name, int age) {return name;}public int print(String name, int age) {return age;}public static void main(String[] args) {demo05 d = new demo05();d.print("2",10);}}
在程序编译时期会报错,方法重复。
3.方法可以在同一个类中或子类中被重载
4.被重载的方法可以改变访问修饰符,但在子父类中,父类中的被重载方法如果为private修饰,子类重载此方法是,只是在子类中定义了一个新的方法,而不会达到重载的效果。
5.被final,static修饰的方法也可以实现重载.
重写(override)
重写是子类对从父类继承过来的方法进行修改,已满足子类一些特定的需求。
1.子类在对父类中的方法进行重写时,不能修改父类中被重写方法的名字和方法中的参数,即方法的结构不能被改变,只能改变方法中的内容。
2.重写方法时,子类不能抛出比父类更大的异常(如父类抛出IOException,而子类抛出Exception异常,这个时候程序就会报错),只能抛出父类方法异常的子类异常。
class Father {public void print() throws IOException {System.out.println("抛出IOException异常");}
}
class Son extends Father {public void print() throws Exception { //报错System.out.println("抛出Exception异常");}
}
3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected,default,private。
4.声明为final和static的方法都不能被重写。构造方法可以重载但是不能重写。
重写和重载的区别
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
参考文档:https://www.runoob.com/java/java-override-overload.html(菜鸟教程)