程序的输出。测试类型的问题

时间:2017-06-20 16:54:33

标签: java output superclass

有人可以向我解释为什么输出是" 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();
     }
}

2 个答案:

答案 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”!!!