理解:重载和重写有什么区别

版权声明:No Rain No Rainbow https://blog.csdn.net/xiangyuenacha/article/details/82380412

重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。

总结一下:
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

重写与重载之间的区别
这里写图片描述
参考代码:OverloadTest 

package com.cto.demo.basic;

// 重载(Overload)测试
public class OverloadTest{

    public void queryUser(int id) {
    }

    public int queryUser(String name) {
        return 1;
    }

    public void queryUser(int id,String name) {
    }

}

参考代码  Polymorphic

package com.cto.demo.basic;

// 测试多态
public class Polymorphic{
    public static void main(String[] args) {
        show(new Cat()); // 以 Cat 对象调用 show 方法
        show(new Dog()); // 以 Dog 对象调用 show 方法

        System.out.println("======================");
        Animal a = new Cat(); // 向上转型,父类引用指向子类对象
        a.eat(); // 调用的是 Cat 的 eat
        Cat c = (Cat) a; // 向下转型
        c.work(); // 调用的是 Cat 的 work
    }

    public static void show(Animal a) {
        a.eat();
        // 类型判断
        if (a instanceof Cat) { // 猫做的事情
            Cat c = (Cat) a;
            c.work();
        } else if (a instanceof Dog) { // 狗做的事情
            Dog c = (Dog) a;
            c.work();
        }
    }
}

abstract class Animal {
    abstract void eat();

    void sleep(){
        System.out.println("sleep==============");
    }
}

class Cat extends Animal {
    public String name = "cat name";
    public void eat() {
        System.out.println(name);
        System.out.println("吃鱼");
    }

    public void work() {
        System.out.println("抓老鼠");
    }
}

class Dog extends Animal {
    public void eat() {
        System.out.println("吃骨头");
    }

    public void work() {
        System.out.println("看家");
    }
}

猜你喜欢

转载自blog.csdn.net/xiangyuenacha/article/details/82380412