重写与重载的区别

1、重写(Override)

先来看一段重写的代码吧。

//父类老杨
class LaoYang{
    public void write() {
        System.out.println("老杨写了一本《活着》");
    }
}
//子类小杨
class XiaoYang extends LaoYang {
    @Override
    public void write() {
        System.out.println("小杨写了一本《继续活着》");
    }
}

public class Person {
    public static void main(String[] args) {
        XiaoYang yang = new XiaoYang();
        yang.write();
    }
}

运行结果

在这里插入图片描述
在上面的代码中,声明了一个类型为 LaoYang 的变量 yang。在编译期间,编译器会检查 LaoYang 类是否包含了 write() 方法,发现 LaoYang 类有,于是编译通过。在运行期间,new 了一个 XiaoYang 对象,并将其赋值给 yang,此时 Java 虚拟机知道 yang 引用的是 XiaoYang 对象,所以调用的是子类 XiaoYang 中的 write() 方法而不是父类 LaoYang 中的 write() 方法,因此输出结果为“小杨写了一本《继续活着》”。

2、重载(Overload)

再来看一段重载代码吧

class YngHa{
    public void read() {
        System.out.println("老杨读了一本《活着》");
    }

    public void read(String book) {
        System.out.println("老杨读了一本《" + book + "》");
    }
}

public class Overload {
    public static void main(String[] args) {
        YngHa yng = new YngHa();
        yng.read();
        yng.read("金瓶梅");
    }
}

运行结果
在这里插入图片描述
重载的两个方法名相同,但方法参数的个数不同,返回类型不同。另外也不涉及到继承,两个方法在同一个类中。就好像类 LaoWang 有两个方法,名字都是 read(),但一个有参数(书名),另外一个没有(只能读写死的一本书)。

3、总结:

重写:

  1. 方法名,参数列表(参数顺序、个数、类型),返回值类型都要相同;

  2. 子类方法不能缩小父类方法的访问权限(public>protected>default>private);

  3. 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常;

  4. 是一个类中多态性的一种表现,具体是运行时期的多态性。

  5. 发生在子类和父类之间;

  6. 方法被定义为final不能被重写。

重载:

  1. 方法名相同、参数列表必须不同(参数顺序、个数、类型)、返回值类型可以相同或不相同;

  2. 是一个类中多态性的一种表现;具体是编译时期的多态性;

  3. 可以有不同的访问修饰符;

  4. 可以抛出不同的异常;

  5. 存在于父类和子类、同类中。

完!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华山之仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值