Java 第二类中的私有字符串
我设计了两个类。我需要调用Card类的format方法,以便在IDCard类中获得Card holder+名称。当我试图编译时,它给出了一个错误,即name在card中具有私有访问权限,但我有一个getter语句Java 第二类中的私有字符串,java,Java,我设计了两个类。我需要调用Card类的format方法,以便在IDCard类中获得Card holder+名称。当我试图编译时,它给出了一个错误,即name在card中具有私有访问权限,但我有一个getter语句 public class Card{ private String name; public Card() { name = " "; } public Card(String n) { name = n;
public class Card{
private String name;
public Card() {
name = " ";
}
public Card(String n) {
name = n;
}
public String getName() {
return name;
}
public boolean isExpired() {
return false;
}
public String format() {
return "Card holder: " + name;
}
}
这是第二节课:
public class IDCard extends Card {
private String idNumber;
public IDCard (String n, String id) {
super (n);
idNumber = id;
}
public String getId() {
return idNumber;
}
public String format() {
return name.format() + "\n" + "ID Number: " + idNumber;
}
}
因为名称是私有的,所以它的子类不能直接访问它。
因此,请使用getter方法获取名称:
return getName() + "\n" + "ID Number: " + idNumber;
请注意,字符串没有零参数格式方法。因此name.format将生成编译错误
但是,您可以使用超级实现并附加当前描述:
return super.format() + "\n" + "ID Number: " + idNumber;
将name.format更改为getName.format或super.format。您不能通过名称调用私有变量来访问它——如果您不想在扩展其他类的子类中包含getter和access变量,则必须使用getter将访问修饰符从private更改为protected。您还应该在格式化方法之前添加@Override注释。在IDCard.format中,调用getName:
无法直接从子类访问private。
顺便说一句,如果您已经对其进行了保护,子类将可以访问它。只需对名称字段进行保护即可。这个关键字就是为了这个目的而存在的,而调用getter方法是很奇怪的 对继承的类使用getName以访问卡类中的name是的,您不能使用子类中扩展的类中的私有字段。您需要使用getter方法。您实际上犯了两个错误: 您不能直接从IDCard访问name,应使用其访问器getName。 即使如此,它也不起作用,因为getName返回一个字符串;实际上,您可能需要在IDCard中执行以下操作:
为什么不使用super关键字调用format方法呢
super.format() + "\n" + "ID Number: " + idNumber;
即使您有一个getter方法,字段本身也是私有的,因此您不能直接访问它。protected也允许从同一个包中的其他类访问此字段。在这种情况下,getter似乎更好。它应该是super.format而不是name.format
public String format() {
return super.format() + "\n" + "ID Number: " + idNumber;
}
super.format() + "\n" + "ID Number: " + idNumber;