当前位置: 代码迷 >> 综合 >> overload(重载)和override(重写)
  详细解决方案

overload(重载)和override(重写)

热度:98   发布时间:2023-11-23 03:13:11.0

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(菜鸟教程)

  相关解决方案