重写和重载的区别

方法的重载和重写是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。

1.方法重载

在Java语言中,如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或者不同的参数类型,则成为方法的重载。

public class Test{
    public static void main(String[] args) {
            int a = 12;
            double b = 12.5d;
            String c = "Hello";        
            System.out.println(a);
           System.out.println(b);
           System.out.println(c);
    }
}

上面的例子中,System.out代表一个java.io.PrintStream对象,而java.io.PrintStream类具有多个println()方法,该方法可以接收不同类型的数据作为参数,根据数据类型的不同,实现数据的打印并转换。java.io.PrintStream类中的这些println()方法就构成了方法的重载。下面是java.io.PrintStream类中的部分源码

public void println(int i){...}
public void println(double d){...}
public void println(String s){...}

方法的重载时注意:

1.重载方法的参数列表必须和被重载的方法不同,并且这种不同必须足以清楚地确定要调用哪一个方法

2.重载方法的返回值类型可以和被重载的方法相同,也可以不同,但是只有返回值类型不同是不够的。

方法的重写和变量隐藏

当子类继承父类时,可以拥有父类的成员方法和成员变量,这样就可以通过子类的实例化对象调用父类的成员变量和方法。在子类中可以创建属于子类独有的成员。如果创建了一个成员方法,该方法的名称和父类中某成员方法的名称相同,但是方法体不同,使子类和父类完成不同的工作时,这种情况称为方法的重写,又称方法覆盖。

方法重写时要遵循以下的规则:

1.参数列表必须完全与被重写的方法参数列表相同,否则不能称其为重写。

2.返回的类型必须与被重写的方法的返回类型相同,否则不能称其为重写。

3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

4.重写方法一定不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法声明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

变量隐藏: 子类中创建了一个成员变量,而该变量和父类中的一个成员变量名称相同,就称作....

如果需要调用父类中被隐藏的变量,可以使用super关键字

原文地址:https://www.cnblogs.com/zhuni/p/4704641.html