在 Java 中,什么时候用重载,什么时候用重写?

文章介绍了Java编程中的重载和重写概念。重载(Overloading)在同一类中允许存在多个同名方法,但参数列表需不同。重写(Overriding)则是在子类中对父类方法的重新定义,以实现特定功能。重载关注方法签名的多样性,而重写关注行为的覆盖。

目录

一、重载

二、重写

三、重载和重写的区别


 

一、重载

重载(Overloading)是指在同一个类中,如果有多个方法的名称相同但参数类型或参数个数不同,那么这些方法就构成了重载。在Java中,方法的重载可以提高代码的可读性和灵活性。

以下是一个简单的Java样例代码,演示了方法的重载:

public class OverloadingExample {
    public int sum(int a, int b) {
        return a + b;
    }

    public int sum(int a, int b, int c) {
        return a + b + c;
    }

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

在上述代码中,sum()方法被重载了三次。第一个sum()方法接受两个整型参数,并返回它们的和;第二个sum()方法接受三个整型参数,并返回它们的和;第三个sum()方法接受两个双精度浮点型参数,并返回它们的和。在调用sum()方法时,编译器会根据传入的参数类型和个数来自动选择需要调用的方法。例如:

OverloadingExample example = new OverloadingExample();
int result1 = example.sum(1, 2); // 调用第一个sum()方法,返回3
int result2 = example.sum(1, 2, 3); // 调用第二个sum()方法,返回6
double result3 = example.sum(1.0, 2.0); // 调用第三个sum()方法,返回3.0

可以看到,在调用sum()方法时,根据传入的参数类型和个数,编译器自动选择了相应的重载方法。

 

二、重写

重写(Overriding)指的是在子类中重新定义父类已有的方法,以实现更加具体化、特定化的功能。在Java中,使用关键字@Override来表明一个方法是被重写的。以下是一个简单的Java代码示例:

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal {
    @Override
    public void move() {
        super.move(); // 调用父类的方法
        System.out.println("狗可以奔跑和走路");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.move();

        Dog dog = new Dog();
        dog.move();
    }
}

上述代码中,Animal是一个父类,其中定义了一个move()方法;而Dog是一个继承自Animal的子类,并重写了move()方法。在main函数中,我们分别创建了一个Animal对象和一个Dog对象并调用其move()方法。在调用dog.move()时,因为Dog重写了move()方法,所以会先调用父类的move()方法输出"动物可以移动",然后再输出"狗可以奔跑和走路"。

 

三、重载和重写的区别

重载(overloading)和重写(overriding)是两个Java中常用的概念。

重载指的是在同一个类中定义多个具有相同名称但参数类型和个数不同的方法,通过不同的参数列表来区分它们。重载方法必须有不同的参数类型或参数个数,不能仅仅有返回值类型不同这一种情况。

重写指的是子类重写父类的方法,即在子类中定义一个与父类方法名称、返回值类型、参数类型和个数完全相同的方法,并且使用@Override注解。重写可以改变方法的实现细节,但是方法的签名必须保持一致。

总结来说,重载与重写最大的区别在于:重载是在同一个类中定义多个方法,方法名相同但参数列表不同;而重写是在子类中重新定义一个方法,方法名、参数列表、返回类型都必须和父类相同。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

customer08

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

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

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

打赏作者

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

抵扣说明:

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

余额充值