java知识点---重写、重载

Java 中的重写(Overriding)和重载(Overloading)是面向对象编程中的两个重要概念,它们都涉及到方法的使用,但应用场景和规则有着显著的区别。

重写(Overriding)

重写是指在继承关系中,子类对父类已有的同名、同参数列表(包括参数类型、个数和顺序)、同返回类型的方法提供了一种不同的实现。重写的主要目的是为了实现多态性,允许子类根据自身的特性对父类的行为进行定制化扩展。

重写规则

  1. 方法签名相同:子类方法必须与父类方法具有相同的方法名、相同的参数列表(参数类型、个数、顺序)以及相同的返回类型。

  2. 访问权限:子类重写的方法访问权限不能低于父类方法。例如,如果父类方法是 public,子类重写的方法不能是 privateprotected

  3. 非静态方法:重写只适用于实例方法(非静态方法),静态方法不能被重写,但可以被隐藏。

  4. 抛出异常:子类方法声明的异常类型应与父类方法相同或为其子类型,或者不抛出任何异常(父类方法允许抛出的异常类型,子类重写时可以减少,但不能增加)。

  5. 注解:对于带有 @Override 注解的方法,编译器会检查该方法是否正确地重写了父类方法,这是一种良好的编程习惯,有助于避免误操作。

示例

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)

重载是指在同一类中定义多个同名方法,但这些方法的参数列表(参数类型、个数或顺序)不同,从而使得编译器能够根据传入的参数类型和数量准确地确定调用哪个方法。重载提供了使用相同方法名处理不同类型或数量参数的能力,增加了代码的灵活性和清晰度。

重载规则

  1. 方法名相同:重载方法必须共享同一个方法名。

  2. 参数列表不同:重载方法的区别在于参数列表(参数类型、个数、顺序)。即使是返回类型不同,但参数列表相同的方法也不能构成重载。

  3. 返回类型无关:虽然重载方法可以具有不同的返回类型,但返回类型本身不能作为区分重载方法的依据。重载的选择基于传入的参数类型和数量。

  4. 访问权限、异常等可不同:重载方法可以有不同的访问修饰符、返回类型以及抛出的异常列表。

示例

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

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

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

Calculator calc = new Calculator();
int sumInts = calc.add(1, 2);
double sumDoubles = calc.add(1.5, 2.3);
int sumThree = calc.add(1, 2, 3);

在此例中,Calculator 类中定义了三个名为 add 的方法,分别接收两个整数、两个双精度浮点数和三个整数作为参数。尽管它们的返回类型都是数字,但由于参数列表不同,这些方法构成了有效的重载。

总结来说,重写是子类对父类方法的重新实现,发生在继承关系中,要求方法签名完全相同;而重载是在同一类中定义多个同名方法,它们的区别在于参数列表的不同。这两者都是 Java 中实现多态性和代码复用的重要手段。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值