假设我们有代码:
public class Solution {
private String name;
private String surname;
Solution(String name, String surname) {
this.name = name;
this.surname = surname;
}
private String getPrivate() { return name; }
public String getPublic() { return surname; }
private void sout() {
new Solution("Anonim private", "Anonim public") {
void printName() {
System.out.println(getPrivate()); // Main private
//System.out.println(this.getPrivate()); // can't compile
System.out.println(super.getPrivate()); // Anonym private
System.out.println(Solution.this.getPrivate()); // Main private
System.out.println("\n");
System.out.println(getPublic()); // Anonym public
System.out.println(this.getPublic()); // Anonym public
System.out.println(super.getPublic()); // Anonym public
System.out.println(Solution.this.getPublic()); // Main public
}
}.printName();
}
public static void main(String[] args) {
new Solution("Main private", "Main public").sout();
}}
评论-我们的输出( intellij idea)
问:为什么super.getPrivate()
返回字符串"Anonym private"
如果我们查看Java文档,我们将看到
如果您的方法重写了它的超类方法之一,则可以通过使用关键字super来调用被重写的方法。
但在这种情况下,获得了super
word的另一种含义:内部类的实例。您可以添加以下内容进行检查:
System.out.println(super.getClass());
System.out.println(this.getClass());
https://stackoverflow.com/questions/51955823
复制相似问题