如果子类具有与其父类中的方法具有相同签名的方法,则它是重写方法。重写继承的方法允许子类为这些方法提供专门的实现。覆盖方法具有与其覆盖的方法相同的名称,数量和类型,并且返回值相同。
覆盖方法可以有不同的throws子句,只要它不指定throws覆盖方法中该子句未指定的任何类型。同样,覆盖方法的访问说明符可以允许比覆盖方法更多但不更少的访问。
例如,protected可以创建超类中的方法,public但不能这样做private。子类不能覆盖final在超类中声明的方法。子类必须重写abstract超类中声明的方法,否则子类本身必须是抽象的。
package org.nhooo.example.fundamental; public class Car { private String type; private String brand; private String model; private int numberOfSeat; public Car() { } public Car(String type, String brand, String model) { this.type = type; this.brand = brand; this.model = model; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getNumberOfSeat() { return numberOfSeat; } public void setNumberOfSeat(int numberOfSeat) { this.numberOfSeat = numberOfSeat; } public String getCarInfo() { return"Type: " + type + "; Brand: " + brand + "; Model: " + model; } }
在 Truck 类中,我们重写 getCarInfo ()方法以提供有关 Truck 对象的更多信息。我们还可以向覆盖方法添加@override 注解。
package org.nhooo.example.fundamental; public class Truck extends Car { private int loadCapacity; public Truck() { } public Truck(String type, String brand, String model) { super(type, brand, model); } public int getLoadCapacity() { return loadCapacity; } public void setLoadCapacity(int loadCapacity) { this.loadCapacity = loadCapacity; } @Override public String getCarInfo() { return "Type: " + getType() + "; Brand: " + getBrand() + "; Model: " + getModel() + "; Load capacity: " + getLoadCapacity(); } }