类型不可见-吸气方法

问题描述

public class car {
private String make;
private String model;
private int mileage;
private int year;
private float price;

public car(String make,String model,int mileage,int year,float price) {
    this.make = make;
    this.model = model;
    this.mileage = mileage;
    this.year = year;
    this.price = price;
} 

private String getMake() {
    return make;
}

private String getModel() {
    return model;
}

private int getMileage() {
    return mileage;
}

private int getYear() {
    return year;
}

private float getPrice() {
    return price;
}

public String toString() {
    return "Make:"+getMake()+"\nModel:"+getModel()+"\nMileage:"+getMileage()+"\nYear:"+getYear()+"\nPrice:"+getPrice();
}



class carTest {
private String[] carToStringArray(car c) {
    String[] carInfo = {c.getMake(),c.getModel(),Integer.toString(c.getMileage()),Integer.toString(c.getYear()),Integer.toString(c.getPrice())};
    return carInfo;
}

@Test
void verifyCarEqualityWithMakeModelYear() {
    String[] expected = {"Toyota","RAV4","2018"};
    car actual = new car("Honda","Altima",45000,2015,12000);
    assertArrayEquals(expected,carToStringArray(actual));
}

}

我在carToStringArray()时出错。 c.getMake(),c.getModel(),c.getMileage(), c.getYear(),c.getPrice()。我收到一条错误消息,提示“来自类型car的getMake()方法不可见”,但在汽车课上却有此方法。我可以知道测试代码出了什么问题吗?

解决方法

如果要从类外部访问getter方法,则需要更改可见性。例如。到public

public String getMake() {
    return make;
}

您可以在official java doc上详细了解它。

,

getMakegetModelgetMileage和其他此类方法-这些都称为吸气剂。在您的代码中,用于这些代码的访问修饰符为private。这意味着这些吸气剂将无法在此类之外访问。

如果要从这些类之外调用这些方法,则必须提升访问修饰符。

通常我们会使用吸气剂public-但这只是一个惯例,没有严格的规定要求您这样做。

阅读this文章以详细了解该主题。

,

所有的吸气剂都是private,所以不能在课外使用。假设publiccar位于同一包中,则应将它们定义为carTest,或至少具有默认可见性。