我有一个班级
public class A {
private String name;
public void setName(String name){
this.name = name;
}
public string getName(){return name;}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(name).append(", ");
return builder.toString();
}
}
我有一个扩展A的子类B,我必须在B中使用toString方法中的A访问名称。我编写了以下代码但不确定这是否是一个好习惯?
public class B extends A {
private String gender;
public void setGender(String gender){
this.gender = gender;
}
public string getGender(){return gender;}
@Override
public String toString() {
c = new A();
StringBuilder builder = new StringBuilder();
builder.append(c.getName()).append(", ");
builder.append(gender).append(", ");
return builder.toString();
}
}
编辑:
如果我无法访问B类中的私有String名称,那么使用@Override setName()
是否必须super.setName(name)
?在那种情况下,如果我不想使用A的任何对象,那么在不扩展A类的情况下使用B类有何不同?
我刚开始使用JAVA来修改服务。
答案 0 :(得分:6)
当您继承一个类时,您还继承了继承的所有公共和受保护的方法和变量。所以你可以做到
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(this.getName()).append(", ");
builder.append(this.getGender()).append(", ");
return builder.toString();
}
答案 1 :(得分:4)
只需在您的toString方法中调用getName()
或super.getName()
像:
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(getName()).append(", ");
builder.append(gender).append(", ");
return builder.toString();
}
答案 2 :(得分:2)
永远不要忘记古老的格言:你不会继承父母的私生子。
如果您希望B
能够访问A.name
,您可以选择以下几种方式:
name
中将public
更改为protected
(差错)或A
(更好)。name
的设置者和获取者访问A
,例如this.getName()
您目前所做的只是返回A.name
的默认值,而不是实际属于B
实例的名称值。