java重载与重写区别

先来谈谈:重载(Overloading)
简单的说重载就是在同一个类中,方法名相同,参数列表不同,与返回值无关。
参数列表不同:
1.参数的个数。
2.参数对应的数据类型不同
简单案例:

    public class Demo{  
        public static void main(String[] args) {

            System.out.println(sum(10,20));
            System.out.println(sum(10,20,30));
        }
        //求两个数的和
        public static int sum(int a,int b){
                    return a+b;
        }
         //求三数的和
        public static int sum(int a,int b,int c){
                    return a+b+c;
        }
    }

再来说说:重写(overriding)
重写:父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

方法重写又称方法覆盖。(只能重写父类的非私有方法)
简单举例:

public class Change{ 

    public static void main(String[] args){
            Son s = new Son();
            s.Speak();
    }
}
   class Father{
        public  void Speak(){
            System.out.println("Father");
        } 
   }
    class Son extends Father{
        public void Speak(){
            super.Speak();
            System.out.println("Son");
       }
    }

重写的规则:
1.参数列表必须与被重写的方法参数列表一模一样。
2.返回值类型必须与被重写的方法返回值类型一模一样。
3.访问修饰符的权限只能大于或者等于被重写方法的权限(public>protected>default>private)
4.重写的方法不能抛出新的异常,或者比被重写方法范围更广的异常,只能抛出与被重写方法一致或者是其子类的异常。(例如:若父类抛出IOException异常,子类不能抛出Exception异常,只能抛出IOException或者IOException子类的异常 )。

重载的规则:
1.方法名称,参数列表必须相同。
2.可以有不同的访问修饰符。
3.返回值类型可以不同。
4.可以抛出不同的异常。

重写与重载的区别
这里写图片描述

猜你喜欢

转载自blog.csdn.net/LynneZoe/article/details/78071721