我有一个关于这个主题的问题对我来说有点难以理解。碰巧子类不继承类的私有属性。但是,我可以使用方法来访问它们。
令我感兴趣的是,它是否间接继承了它们?考虑这个案例:
package Inheritance;
public class Bike {
private String model;
void setModel(String model){
this.model = model;
}
String getModel(){
return model;
}
}
package Inheritance;
public class MountainBike extends Bike{
public static void main(String[] args){
MountainBike mountainBike = new MountainBike();
mountainBike.setModel("rtx500");
System.out.println(mountainBike.getModel());
}
}
发生的事情是我创建了一个 MountainBike 类型的对象。从理论上讲,我应该无法访问这些属性,因为我没有从超类继承它们。我使用 setter 将其初始化为自己的对象(不属于超类的对象,而是属于子类)。如果私有字段不应该被继承,子类如何将其初始化为自己的属性(即继承)?
感谢您的帮助!
我应该无法访问这些属性,因为我没有从超类继承它们。
这是正确的。 您无法从子类或除超类之外的任何其他地方访问
model
字段 diretlu。
我使用 setter 将其初始化为自己的对象(不属于超类的对象,而是属于子类)。
是的,您确实使用了 setter,但“作为其自己的”是不正确的。 setter 为您的子类提供了一种将值传递给超类的方法,而超类则采用解析后的值并将其写入(仍然)私有
model
字段。
如果私有字段不应该被继承,子类如何将其初始化为自己的属性(即继承)?
该字段不被继承,它仍然属于超类。
如果您将代码更改为此,它可能会帮助您理解
model
字段属于超类:
package Inheritance;
public class Bike {
private String model;
void setModel(String model){
this.model = model;
}
String getModel(){
return model;
}
public void printSuperclassModel() {
System.out.println("Model from superclass is " + model);
}
}
package Inheritance;
public class MountainBike extends Bike{
public void printSubclassModel() {
System.out.println("Model from subclass is " + getModel());
}
public static void main(String[] args){
MountainBike mountainBike = new MountainBike();
mountainBike.setModel("rtx500");
System.out.println(mountainBike.getModel());
printSuperclassModel();
printSubclassModel();
mountainBike.setModel("test2");
printSuperclassModel();
printSubclassModel();
}
}