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

最佳答案

您的代码令人困惑,因为您在同一个名称的不同类中有两个方法。您在构造函数getText()中调用了B(),该构造函数正在从B类获取文本。您希望它从A类获取文本。我所做的只是将B类中getText()的名称更改为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

09-10 07:05
查看更多