Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么该示例的编译失败_Java_Inheritance_Polymorphism_Scjp_Ocpjp - Fatal编程技术网

Java 为什么该示例的编译失败

Java 为什么该示例的编译失败,java,inheritance,polymorphism,scjp,ocpjp,Java,Inheritance,Polymorphism,Scjp,Ocpjp,当我在处理SCJP6转储时,发现了这个令人困惑的练习: 在两个不同文件中定义的给定类: package packageA; public class Message { String getText() { return “text”; } } 以及: 执行XMLMessage.main的结果是什么 A. text B. Compilation fails. C. <msg>text</msg> D. An exception is thrown at ru

当我在处理SCJP6转储时,发现了这个令人困惑的练习:

在两个不同文件中定义的给定类:

package packageA;

public class Message {

String getText() { return “text”; }

}
以及:

执行XMLMessage.main的结果是什么

A. text

B. Compilation fails.

C. <msg>text</msg>

D. An exception is thrown at runtime.

答案是:B,但我不明白为什么;我认为答案应该是C。

不能覆盖包默认方法,因为它在另一个包中不可见。 在您的示例中,类消息中的方法getText仅对packageA的成员可见。

方法字符串getText{return“text”;}具有包的默认作用域。因此,它在包装外不可见

因此,不可能重写packageA之外的XMLMessage类中的方法


您可以在此处学习

如果您发布的代码是书中的代码,您提到的正确答案是C,让我解释一下原因

同样,假设您复制了书中所示的代码,那么下面一行:

String getText() { return “<msg>text</msg>”;}

在本例中,由于Message.getText方法未在包外公开,因此存在编译错误。

您是否尝试编译示例代码?是否尝试运行它?是否确定第2.5行的某个地方没有@Override?因为它确实编译和打印文本。不,我只是编译它,它编译时带有警告,所以我想知道为什么它只有警告而不是编译器错误。我只是运行它,它运行得很好谢谢你的回答,但我认为,由于XMLMessage无法在packageA.Message中看到该方法,它可以像定义一个新方法一样定义它。为什么只是警告?为什么只是警告?更重要的是,我可以运行它并生成文本。当我编译和运行代码时,我在IDE中看不到任何警告。jbaruetta是正确的-如果代码示例试图引用方法getText from Message,那么这将是一个编译错误。我没有看到代码示例引用了XMLMessage中的getText,假设您对答案B的预测一开始是正确的:谢谢您的回复,但我认为因为XMLMessage在packageA.Message中看不到该方法,所以它可以将其定义为一个新方法。为什么这只是一个警告?更重要的是,我可以运行它并生成文本为什么它只是一个警告?更重要的是,我可以运行它并生成文本,只要您声明一个XMLMessage实例并访问packageB中的getText方法,这种情况下代码是有效的,输出是文本,这对您来说非常重要,我前面提到过,这并没有覆盖packageA.Message.getText。谢谢jbarrueta的所有解释,我同意你的观点。然而,我真的很想知道为什么在dumps的书中他们说B是正确的答案,你认为在真正的SCJP 6考试中答案会是C,或者他们可能会犯这样的错误?我刚刚看到在dumps的中文版本中,答案是C:
String getText() { return “<msg>text</msg>”;}
 public static void main(String[] args) {

    Message message = new XmlMessage();
    System.out.println(message.getText());
}