【问题标题】:How do I override `toString` in my derived class and use the private instance variables from the base class?如何在派生类中覆盖 `toString` 并使用基类中的私有实例变量?
【发布时间】:2014-08-22 19:54:11
【问题描述】:

这是我的基类Vehicleprivate 实例变量。

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 语句给我带来了问题,因为此类无法访问 Vehicle 中的 private 实例变量。我知道如果Vehicle 中的实例变量具有包/受保护的访问权限,这不会是问题,但要么我的导师犯了错误,要么我们应该想出一个解决方法。

有没有办法解决我错过的问题?

【问题讨论】:

    标签: java inheritance polymorphism overriding


    【解决方案1】:

    子类不能访问超类的私有成员,除非你有他们的getter。

    你能做什么:

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

    【讨论】:

    • 你能像这样简单地附加到基类方法的返回吗?惊人的。如此简单。
    • 另外,我要感谢您非常仓促和高效的回复。
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 2015-12-11
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2010-11-22
    • 2016-02-28
    • 2019-05-05
    相关资源
    最近更新 更多