【JAVA】重载与重写的含义与区别

版权声明:转载请注明 https://blog.csdn.net/qq_33591903/article/details/82289064

                                       重载与重写的含义与区别

重载与重写是java多态性的不同表现方式,在编程中特别常见。理解两者的区别,对我们编写高质量的代码尤为重要。


一、重载(overload)

重载是指在一个类中定义了多个同名的方法,他们有着不同的参数列表(包括参数类型、参数个数、参数顺序等)。

在使用重载时,应该要注意:

(1)参数类型、个数、顺序一致,只是参数名称不一致,不能构成重载。

(2)不能通过方法的访问权限、返回值类型和抛出的异常类型来决定重载。

代码示例:

package day0901;

public class TestLR {
    public int getA() {
        return 1;
    }

    public void getA(int a) {
        System.out.println("a:" + a);
    }
}

 

二、重写(override)

重写发生在父类与子类之间,子类覆盖父类中的一个方法并对其进行重写,用以达到不同的作用。

在使用重写时,应该要注意:

(1)子类中的重写方法要和父类被重写方法有相同的返回值类型、方法名、参数列表和抛出的异常。

(2)子类不能重写父类中private方法,否则只是子类定义了一个新方法,不属于重写的范畴。

代码示例:

package day0901;

class Animal {
    public void shout() {
        System.out.println("动物在叫");
    }
}

class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("小狗:汪汪汪");
    }
}

public class Test {
    public static void main(String args[]) {
        Animal animal = new Dog();
        animal.shout();
        //输出
        //小狗:汪汪汪
    }
}

 

三、两者的区别

(1)重载发生在一个类里,被重载方法与重载方法是垂直关系。而重写发生在父类与子类中,被重写方法与重写方法是水平关系。

(2)具体调用哪一个重载方法是由参数列表来决定的。而具体调用哪一个重写方法是由调用对象的类型来决定的。

    【1】在编译时就可以依据参数列表的不同决定调用哪个重载方法,属于编译时多态。

    【2】只有在运行时才能确定调用哪一个重写方法,属于运行时多态。


何为运行时多态?

父类的引用变量不仅可以指向父类的实例对象(Animal animal=new Animal()),也可以指向子类的实例对象(Animal animal=new Dog())。同样,接口的引用变量也可以指向实现类的实例对象。而程序调用的方法在运行期才动态绑定(绑定是指将一个方法调用与方法主体连接到一起),就是引用变量所指向的具体实例对象所属类中的方法,也就是内存中正在运行的那个实例对象的方法,而不是引用变量的类型中定义的方法。

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_33591903/article/details/82289064