方法的重载和重写有什么区别

1.是什么

        在Java中,方法的重载(Overloading)和重写(Overriding)是两个不同的概念,它们用于实现不同的目的和功能。以下是方法重载和方法重写的区别:


方法重载(Overloading)

        方法重载是指在同一个类中定义多个方法,这些方法具有相同的名字但参数列表不同。重载方法允许程序调用具有不同参数列表的方法,从而实现相同操作的不同方式。

特点:

  1. 方法名相同:所有重载方法必须具有相同的名字。
  2. 参数列表不同:每个重载方法必须有不同的参数列表,这意味着参数的类型、数量或顺序必须不同。
  3. 返回类型可以相同也可以不同:重载方法可以有相同的返回类型,也可以有不同的返回类型。
  4. 方法可以有默认参数:Java 8及以后版本允许方法有默认参数,但即使有默认参数,只要参数列表不同,方法仍然是重载的。
  5. 作用域可以不同:重载方法可以有不同作用域,如publicprivateprotected等。

示例:

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

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

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

        在这个例子中,Calculator类定义了三个add方法,每个方法都有不同的参数列表。


方法重写(Overriding)

        方法重写是指子类提供与父类方法具有相同名字和参数列表的方法。重写方法允许子类提供与父类相同操作的不同实现。

特点:

  1. 方法名相同:所有重写方法必须具有相同的名字。
  2. 参数列表相同:重写方法的参数列表必须与父类方法完全相同。
  3. 返回类型可以相同也可以不同:子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。比如 父类 返回类型是 Object,子类方法返回类型是String
  4. 访问权限可以相同也可以不同:子类和父类方法的访问权限相同或子类有更高的访问权限(如父类是protected,子类可以是public)。
  5. 抛出异常可以不同:重写方法可以抛出与父类方法不同的异常,或者不抛出任何异常。

示例:

class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

        在这个例子中,Dog类重写了Animal类的makeSound方法,提供了不同的实现。


总结:

区别点重载(Overloading)重写(Overriding)
发生位置同一个类中父类与子类之间
参数列表必须不同(参数个数、类型或顺序不同)必须相同
返回类型可以相同,也可以不同可以相同也可以不同(Java 5 之后,允许返回类型是协变类型)
方法名相同相同
修饰符无限制子类访问修饰符不能比父类的更严格
多态性编译时多态性运行时多态性
与继承的关系与继承无关与继承相关,子类重写父类的方法
目的提供同一个方法名的多个实现,以处理不同类型或数量的参数子类定制父类方法的行为

典型应用场景

  • 重载(Overloading)

    • 重载通常用于同一个类中提供多种方式的功能。例如,println() 方法有多个重载版本,接受不同的参数类型(如 intdoubleString 等)。
  • 重写(Overriding)

    • 重写用于子类根据自身的需求来定制化父类的行为。例如,toString() 方法通常会在子类中重写,以提供类的自定义字符串表示形式。

          好啦,今天的干货就到这啦~    有什么疑问的小伙伴欢迎到评论区留言!


猜你感兴趣的方面:
#自动类型转换有哪些细节???
#JVM、JRE、JDK之间的关系
#面向对象和面向过程有什么区别
#彻底区分:基本数据类型、引用数据类型和包装类型
#成员变量、局部变量和静态变量的区别
#彻底弄清:原码、反码、补码
#值传递和引用传递的区别
#按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
#面向对象的三大特征
#说一说你对多态的理解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值