如何覆盖Java中的方法?

如果子类具有与其父类中的方法具有相同签名的方法,则它是重写方法。重写继承的方法允许子类为这些方法提供专门的实现。覆盖方法具有与其覆盖的方法相同的名称,数量和类型,并且返回值相同。

覆盖方法可以有不同的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();
    }
}