有人可以向我解释为什么输出是" DDAC"而不是" DAC"?为什么要打印" D"两次?
class A {
String text = "A";
String getText(){
return text;
}
public static void main(String[] args) {
System.out.println((new B()).getText());
}
}
class B extends A{
B(){
text = getText() + "C";
}
String getText(){
return "D" + super.getText();
}
}
答案 0 :(得分:2)
您的代码令人困惑,因为您在不同的类中有两个具有相同名称的方法。您在构造函数getText()
中调用了B()
,它从类B获取文本。您希望它从类A获取文本。我所做的只是在类中更改getText()
的名称B到getBText()
,并正确调用方法。代码如下所示:
class ScratchPaper {
String text = "A";
String getText(){
return text;
}
public static void main(String[] args) {
System.out.println((new B()).getBText());
}
}
class B extends ScratchPaper {
B(){
text = getText() + "C";
}
String getBText(){
return "D" + super.getText();
}
}
输出就是你的期望:
DAC
答案 1 :(得分:2)
在代码中,如果你看到什么时候
public static void main(String[] args) {
System.out.println((new B()).getText());
}
首先调用,调用B的构造函数
B(){
text = getText() + "C";
}
如果您看到属性文本是从超类A继承的话 所以,当构造函数被调用时
B(){
text = getText() + "C";
}
String getBText(){
return "D" + super.getText();
}
作为超类属性的text的值获取值'DAC'
text = "DAC";
现在创建B的实例,然后再次调用B的getText()
**(new B()).getText()**
调用以下代码
String getBText(){
return "D" + super.getText(); // here super.getText() = "DAC"
}
打印“DDAC”!!!