zoukankan      html  css  js  c++  java
  • 重写和重载的区别

    方法的重载和重写是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关键字

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/zhuni/p/4704641.html
Copyright © 2011-2022 走看看