在Java中,方法的重写和重载是面向对象编程中常见的概念。方法的重写是指子类重新定义父类中已经存在的方法,而方法的重载是指在同一个类中可以定义多个同名方法,但是它们的参数列表不同。
重写示例:
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");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.makeSound(); // 输出: Animal makes a sound
Dog dog = new Dog();
dog.makeSound(); // 输出: Dog barks
}
}
在上面的例子中,Dog
类重写了Animal
类中的makeSound
方法,当调用dog.makeSound()
时会执行Dog
类中的方法。
重载示例:
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();
int sum1 = calculator.add(5, 3); // 调用第一个add方法
double sum2 = calculator.add(2.5, 3.5); // 调用第二个add方法
System.out.println("Sum of integers: " + sum1); // 输出: Sum of integers: 8
System.out.println("Sum of doubles: " + sum2); // 输出: Sum of doubles: 6.0
}
}
在上面的例子中,Calculator
类中有两个同名方法add
,分别接受不同类型的参数。当方法被调用时,根据传入参数的类型来确定具体调用哪个版本的方法。
方法的重写
当父类的方法不能满足子类现在的需求时,需要进行方法重写
书写格式
在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法
@Override重写注解
1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。
2.加上注解后如果有红色波浪线,表示语法错误。
3.建议重写方法都加@Override注解,代码安全,优雅!
方法重写注意事项和要求
- 重写方法的名称、形参列表必须与父类中的一致。
class Parent {
public void display(int num) {
System.out.println("Parent class method");
}
}
class Child extends Parent {
// 重写父类方法,方法名称和形参列表必须与父类一致
public void display(int num) {
System.out.println("Child class method");
}
}
2.子类重写父类方法时,访问权限子类必须大于等于父类(空着不写<protected <public)
class Parent {
protected void display() {
System.out.println("Parent class method");
}
}
class Child extends Parent {
// 子类重写父类方法时,访问权限必须大于等于父类
public void display() {
System.out.println("Child class method");
}
}
3.子类重写父类方法时,返回值类型子类必须小于等于父类
class Parent {
public Number getNumber() {
return 10;
}
}
class Child extends Parent {
// 子类重写父类方法时,返回值类型必须小于等于父类
public Integer getNumber() {
return 20;
}
}
4.建议:重写的方法尽量和父类保持一致。
class Parent {
public void display() {
System.out.println("Parent class method");
}
}
class Child extends Parent {
// 建议重写的方法尽量和父类保持一致
public void display() {
System.out.println("Child class method");
}
}
5.只有被添加到虚方法表中的方法才能被重写
在Java中,除了static
和final
方法,其他方法都可以被重写。虚方法表是用于支持动态绑定的机制,只有动态绑定的方法才能被重写。还有private私有的方法也不能重写哦!!!