继承不起作用

Pen*_*826 0 java inheritance

嘿,我刚刚练习继承,我遇到了一个问题.我在我的汽车类(子类)中得到错误,车辆(父)中的变量不可见.我没有做任何改变这一点,我甚至不知道如何让它隐形.谁能帮我这个.

public class Vehicle 
{
    private String make, model, colour;
    private int registrationNumber;

    public Vehicle()
    {
        this.make = "";
        this.model = "";
        this.colour = "";
        this.registrationNumber = 0;


    }


    public Vehicle(String make, String model, String colour,
            int registrationNumber) 
    {
        this.make = make;
        this.model = model;
        this.colour = colour;
        this.registrationNumber = registrationNumber;
    }


    public String getMake() 
    {
        return make;
    }


    public void setMake(String make) 
    {
        this.make = make;
    }


    public String getModel() 
    {
        return model;
    }


    public void setModel(String model) 
    {
        this.model = model;
    }


    public String getColour() 
    {
        return colour;
    }


    public void setColour(String colour) 
    {
        this.colour = colour;
    }


    public int getRegistrationNumber() 
    {
        return registrationNumber;
    }


    public void setRegistrationNumber(int registrationNumber) 
    {
        this.registrationNumber = registrationNumber;
    }



    public String toString() 
    {
        return "Vehicle [make=" + make + ", model=" + model + ", colour="
                + colour + ", registrationNumber=" + registrationNumber + "]";
    }






}

public class Car extends Vehicle
{
private int doors;
private String shape;

public Car()
{
    super();
    this.doors = 0;
    this.shape = "";
}

public Car(String make, String model, String colour, int registrationNumber) 
{
    super(make, model, colour, registrationNumber);
    this.make = make;
    this.model = model;
    this.colour = colour;
    this.registrationNumber = registrationNumber;


}






}
Run Code Online (Sandbox Code Playgroud)

错误消息:

Description Resource    Path    Location    Type
The field Vehicle.make is not visible   Car.java    /VehicleApp/src line 19 Java Problem
The field Vehicle.model is not visible  Car.java    /VehicleApp/src line 20 Java Problem
The field Vehicle.colour is not visible Car.java    /VehicleApp/src line 21 Java Problem
The field Vehicle.registrationNumber is not visible Car.java    /VehicleApp/src line 22 Java Problem
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

"问题"是变量private,因此子类不可用.据推测,你正试图直接访问它们Car(因为你没有包括源代码,所以很难说).

可以使它们成为受保护的变量 - 但我强烈建议您将它们保留为private,而是使用子类中的属性(get和set方法).字段是一个实现细节 - 您应该考虑向子类以及其他代码公开的API.

有关Java中访问控制的更多详细信息,请参阅JLS部分6.6.例如:

否则,如果声明了成员或构造函数private,那么当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问.


Cor*_*urn 5

private变量将不可见.它们仅限于它们所定义的类.protected变量(和函数)对于子类是可见的.

更改:

private String make, model, colour;
private int registrationNumber;
Run Code Online (Sandbox Code Playgroud)

protected String make, model, colour;
protected int registrationNumber;
Run Code Online (Sandbox Code Playgroud)

我建议不要将它们保密,因为这意味着它Car不会从中继承这些变量Vehicle.强迫a Car调用它自己的父母的getter和setter正在引入Car和之间的差距Vehicle.它说,a Car没有颜色,品牌,型号或注册号,但它必须转到一个单独的类(Vehicle)并向类询问它的颜色,品牌,型号和注册号.