Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在派生类中重写'toString',并使用基类中的私有实例变量?_Java_Inheritance_Polymorphism_Overriding - Fatal编程技术网

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

Java 如何在派生类中重写'toString',并使用基类中的私有实例变量?,java,inheritance,polymorphism,overriding,Java,Inheritance,Polymorphism,Overriding,这是我的基类Vehicle,带有private实例变量 public class Vehicle { private int numPassengers; private String colour; Vehicle(int passengers, String colour) { this.numPassengers = passengers; this.colour = colour; } public String

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


有没有一条路是我错过的

子类无法访问超类的私有成员,除非您为它们提供了getter

你能做的是:

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

子类无法访问超类的私有成员,除非您为它们提供了getter

你能做的是:

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

您能像这样简单地附加到基类方法的返回中吗?令人惊叹的非常简单。另外,我要感谢您的快速高效的响应。您能像这样简单地附加到基类方法的返回中吗?令人惊叹的很简单。同时,我也要感谢你令人难以置信的草率和高效的回应。