重写和重载的区别

重写和重载的区别



一、重写

1.重写的定义

重写(Override)是指子类重新定义父类中已有的方法,使得子类可以根据自己的需要对父类的方法进行重新实现。重写方法的名称、参数类型和个数以及返回值类型都必须与父类中被重写的方法一致。

2.代码示例

class Animal {
    public void sound() {
        System.out.println("动物发出声音");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("猫发出“喵喵”声");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.sound();
        Cat cat = new Cat();
        cat.sound();
    }
}

3.重写规则

1.子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致

2.被重写的方法返回值类型可以不同,但是必须是具有父子关系的


//伪代码

class Animal {
    public Animal sound() {
        System.out.println("动物发出声音");
    }
}

class Cat extends Animal {
    @Override
    public Cat sound() {
        System.out.println("猫发出“喵喵”声");
    }
}

3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected

4.父类被static、private修饰的方法、构造方法都不能被重写

5.重写的方法, 可以使用 @Override 注解来显式指定.,用来进行一些合法性校验。比如上面的示例代码中,将sound写成sond,这个时候编译器就提醒写错了

6.子类中的重写方法不能抛出新的异常


二、重载

1. 重载的定义

重载(Overload)是指在同一个类中定义多个方法,它们具有相同的名称但是参数列表不同。重载方法的参数类型、个数或者顺序必须不同。

2. 代码示例

class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        System.out.println(calculator.add(1, 2));
        System.out.println(calculator.add(1.2, 2.3));
    }
}

3.重载规则

1.方法的参数表必须不同,包括参数的类型或个数,以此区别不同的方法体

如代码示例:

class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

2.方法的返回类型,修饰符可以相同也可以不同


总结

区别点重写(override)重载(override)
参数列表一定不能修改必须修改
返回类型一定不能修改(除非可以构成父子类关系)可以修改
访问限定符可以扩大访问权限,但是不能降低可以修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值