【发布时间】:2020-02-14 22:53:26
【问题描述】:
我正在使用 Java 和 Android Studio IDE。我试图从它的子类调用父类中的方法。我写了一个小测试例程,但我只得到一个空结果。
在我的主项目中,我有父对象/类和子对象/类,我想从子类/对象调用的父对象/类中获取一个值。 (房屋对象由墙对象组成,我的墙对象试图获取房屋类中指定的“墙类型”。但下面是我正在使用的一个小例子。
我已经尝试搜索这个问题,但是多次阅读其他人的代码只会让这个问题让我更加困惑。我一定是误解了这应该如何工作。
我尝试重写获取数据的方式,方法是调用 super.getMethod() 或覆盖父方法。我也尝试过将我的变量/方法设置为公共/私有和受保护的,但一无所获。
我的家长班:
public class Parent {
protected String myName;
protected Child parentsChild;
public Parent() {}
public Parent (String myName, Child parentsChild) {
this.myName = myName;
this.parentsChild = parentsChild;
}
public String getMyName() {
return this.myName;
}
public void setMyName(String myName) {
this.myName = myName;
}
public Child getParentsChild() {
return this.parentsChild;
}
public void setParentsChild(Child parentsChild) {
this.parentsChild = parentsChild;
}
}
我的孩子班:
public class Child extends Parent {
String childName;
public Child() {
}
public Child(String childName) {
this.childName = childName;
}
public String getChildName() {
return childName;
}
public void setChildName(String childName) {
this.childName = childName;
}
public String getParentName() {
return super.getMyName();
}
@Override
public String getMyName() {
return super.getMyName();
}
}
我的主要活动:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Child child = new Child("Logan");
Parent parent = new Parent("Karrie", child);
System.out.println("Parent: My name is " + parent.getMyName());
System.out.println("Child: My parent's name is " + child.getParentName());
System.out.println("@Override-> Child: My Parent's name is " + child.getMyName());
}
}
我希望在使用“Karrie”构造父类时检索父类的名称。相反,我只得到“空”。多么可怜的孩子啊! :-(
这是我的日志:
2019-10-17 20:25:36.594 27040-27040/com.example.android.superclassinheritancetesting I/System.out: Parent: My name is Karrie
2019-10-17 20:25:36.594 27040-27040/com.example.android.superclassinheritancetesting I/System.out: Child: My parent's name is null
2019-10-17 20:25:36.594 27040-27040/com.example.android.superclassinheritancetesting I/System.out: @Override-> Child: My Parent's name is null
感谢您的帮助! :]
【问题讨论】:
-
您的子构造函数永远不会调用传入父名称的超级构造函数,您也不会在 onCreate 中的任何位置显式设置父名称。这里没有惊喜。
-
我会尝试调试——答案很清楚。您扩展了父级(忽略子类型在这里没有意义),但您从未设置 myName。这将更好地表示为一个单一的类,有一个孩子的列表,询问哪些只是一个人。
-
"这里的父母清楚地知道自己的名字"???父母只会得到传递给它的东西,不多也不少。如果你的真实代码反映了这段代码,那么请再次阅读我的第一条评论,看看为什么你的上述假设根本上是错误的。
-
为什么
Child扩展Parent?如果有的话,它应该是相反的。父母永远是别人的孩子,但孩子可能永远也不会成为父母。 -
你得到 null 是因为你从来没有设置过它,正如@HovercraftFullOfEels 已经告诉你好几次了。
标签: java object subclass superclass