如何在派生类中重写`toString`并使用基类中的私有实例变量?

时间:2014-08-22 19:54:11

标签: java inheritance polymorphism override

这是我的基类Vehicle,带有private个实例变量。

public class Vehicle {
    private int numPassengers;
    private String colour;

    Vehicle(int passengers, String colour) {
        this.numPassengers = passengers;
        this.colour = colour;
    }

    public String toString() {
        return colour + " " + numPassengers + " passengers";
    }
}

请注意,此课程中没有访问者方法,我无法以任何方式编辑此课程。

我有一个派生类Car,其中包含一个额外的实例变量numberOfDoors

public class Car extends Vehicle
{   
    private int numberOfDoors;

    public Car(String newColour, int newNumberOfPassengers, int newNumberOfDoors)
    {
        super(newNumberOfPassengers, newColour);
        this.numberOfDoors = newNumberOfDoors;
    }

    @Override
    public String toString()
    {
        return colour + " " + numPassengers + " passengers " + numberOfDoors + " doors";
    }
}

我可以根据需要编辑这个类,并且我知道不同的构造方法签名。

显然,toString()中的return语句给了我一些问题,因为这个类无法访问private中的Vehicle实例变量。我知道如果Vehicle中的实例变量具有包/受保护的访问权限,这不会是一个问题,但是我的教师犯了一个错误,或者我们应该想出一个解决方法。

我有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

子类无法访问超类的私有成员,除非你有这些超类。

你能做什么:

@Override
public String toString()
{
    return super.toString() + " " + numberOfDoors + " doors";
}