面试题答案
一键面试- 方法签名必须相同:
- 重写方法的方法名、参数列表和返回类型(在JDK 5.0及以上,返回类型可以是协变类型,即子类方法返回类型是父类方法返回类型的子类)必须与父类被重写方法相同。
- 例如:
class Animal {
public String makeSound() {
return "Generic animal sound";
}
}
class Dog extends Animal {
@Override
public String makeSound() {
return "Woof!";
}
}
- 访问修饰符限制:
- 子类重写方法的访问修饰符不能比父类被重写方法的访问修饰符更严格。
- 比如父类方法是
protected
,子类重写方法可以是protected
或public
,但不能是private
。 - 示例:
class Parent {
protected void display() {
System.out.println("Parent display");
}
}
class Child extends Parent {
@Override
public void display() {
System.out.println("Child display");
}
}
- 不能抛出比父类更多的异常:
- 子类重写方法不能抛出比父类被重写方法更多的异常,或者不能抛出比父类被重写方法声明的异常更宽泛的异常类型。
- 例如:
class Vehicle {
public void start() throws Exception {
System.out.println("Vehicle started");
}
}
class Car extends Vehicle {
@Override
public void start() throws RuntimeException {
System.out.println("Car started");
}
}
这里父类start
方法声明抛出Exception
,子类重写的start
方法可以抛出RuntimeException
(因为RuntimeException
是Exception
的子类)。