Java方法重写
Java中的方法重写是指子类继承了父类的方法,并对其进行了修改或重新定义。方法重写的条件是:
- 子类中的方法必须和父类中被重写的方法具有相同的方法名、返回类型和参数列表。
- 子类中的方法的访问修饰符不能比父类中被重写的方法的访问修饰符更严格。例如,如果父类中的方法是public,则子类中的方法可以是public、protected或默认访问级别,但不能是private。
- 子类中的方法不能比父类中的方法抛出更多或更广泛的异常。如果父类方法抛出了某种异常,子类方法可以不抛出异常,但不能抛出其他类型的异常。
当一个对象调用被重写的方法时,会根据该对象的实际类型来调用相应的方法。这种行为被称为动态绑定,也称为后期绑定或运行时绑定。这意味着,如果子类重写了父类的方法,且该方法被父类的引用指向了子类的对象,那么调用该方法时,会调用子类的实现。
例如,假设有一个父类Animal和一个子类Dog,其中都有一个名为makeSound()的方法。当使用Animal类的引用指向一个Dog对象时,调用makeSound()方法时,会调用Dog类中的实现。
以下是一个示例,展示了方法重写的使用:
class Animal {
public void makeSound() {
System.out.println("Animal is making a sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog is barking");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Animal dog = new Dog();
animal.makeSound(); // 输出:"Animal is making a sound"
dog.makeSound(); // 输出:"Dog is barking"
}
}
在上面的例子中,当animal.makeSound()被调用时,会输出"Animal is making a sound",因为animal是Animal类的实例,调用的是Animal类中的makeSound()方法。当dog.makeSound()被调用时,会输出"Dog is barking",因为dog是Dog类的实例,调用的是Dog类中重写的makeSound()方法。