提问人: 提问时间:11/26/2021 最后编辑:ernest_k 更新时间:11/26/2021 访问量:138
为什么子类继承私有字段?
Why subclasses inherit private fields?
问:
我正在创建一个新类,即车辆。我希望唯一受保护的变量继承到子类。但是当我尝试使用 IDE 创建构造函数时,它也使用了超类私有变量?-这是私人字符串 vehicleName- 我不清楚这种情况。我不应该使用 auto Concstructor 吗?
public class Vehicle {
protected int capacityOfPassengers;
protected String mapOfRoute;
private String vehicleName;
public Vehicle(int capacityOfPassengers, String mapOfRoute,
String vehicleName) {
this.capacityOfPassengers = capacityOfPassengers;
this.mapOfRoute = mapOfRoute;
this.vehicleName = vehicleName;
}
}
public class LandVehicle extends Vehicle {
private String brand;
private int priceModel;
public LandVehicle(int capacityOfPassengers, String mapOfRoute,
String vehicleName, String brand, int priceModel) {
super(capacityOfPassengers, mapOfRoute, vehicleName);
this.brand = brand;
this.priceModel = priceModel;
}
}
答:
1赞
Alex Sveshnikov
11/26/2021
#1
您无法从 LandVehicle 访问 vehicleName。您只需将一些字符串参数传递给 super 构造函数,super 构造函数就会设置 vehicleName。例如,不能在 LandVehicle 类中将此字段初始化为 。this.vehicleName = vehicleName
评论
0赞
11/26/2021
当我尝试创建新的 obj 时,我必须给出一个 vehicleName,例如 LandVehicle landV = new LandVehicle(25,“Bergen-Cologne”, “vehicleName”, “Man”, 2009);但是当我尝试从 LandVehicle 创建 obj 时,我不想给出 vehicleName
0赞
11/26/2021
我想我想要的不是很适合OOP。在使用构造函数创建新的 obj 时,我必须给出一个 vehicleName。但无论如何,我无法访问 vehicleName,因为它是私有的。这就是私有修饰符的使用方式。
1赞
davidrhp
11/26/2021
#2
通常,一个类有一个默认的构造函数,不带参数,如果你没有提供任何构造函数。
当 u 使用 your 进行子类化时,ur 是 的一种 。这意味着它从其超类继承方法和字段,即使它们是私有的。对于类,这些成员只是不可见,但它们仍然存在 - 否则它无法正常工作。private 关键字是一个访问修饰符,用于更改调用方的可见性。Vehicle
LandVehicle
LandVehicle
Vehicle
LandVehicle
因此,要实例化 ,您还必须提供其超类的必需属性(因为 中没有默认的无参数构造函数)。在您的示例中,没有名称 (from ) 的 a 没有意义,因为 a 是 ,它需要一个名称。LandVehicle
Vehicle
Vehicle
LandVehicle
Vehicle
LandVehicle
Vehicle
下一个:是否可以访问私有静态变量和方法?
评论
LandVehicle
Vehicle
Vehicle
LandVehicle
Vehicle
LandVehicle
super(...)