为什么匿名class不能访问私有方法和变量?
Why anonymous class can't access private methods and variables?
package demo;
class Child{
private static int a=50;
public void fin() {
System.out.println("hello");
}
private void fly() {
System.out.println("lol");
}
}
public class Hello {
public static void main(String[] args)
{
Child c=new Child() {
public void f() {
System.out.println("sorry"+a);
}
public void fin() {
System.out.println("hello");
}
};
c.fin();
}}
以上是 java 的代码 我的观点是为什么不能在匿名 class 中调用私有方法和变量,因为我在某处读到匿名 class 可以访问所有成员封闭的 class.
https://www.baeldung.com/java-anonymous-classes
go checkout 指定匿名 class 的每个成员都可以访问封闭的 class.
的所有成员
关于 "inner class" 和 "anonymous class" 的代码存在混淆。
注意你有 3 个 class:
Child
Hello
Hello
:在 Hello
内部声明的匿名 class,其父级是 Child
代码中的混淆是关于后者的:
Hello
是 Child
的子class
Hello
是 Hello
的内部 class
这意味着:
Hello
无法从 Child
访问私有字段,因为 subclasses 无法访问其 super classes 的私有元素
Hello
可以从 Hello
访问私有字段,因为匿名内部 classes 可以访问其封闭 classes 的私有元素
这段代码看的更清楚:
class Child {
private int a = 50;
}
public class Hello {
private int b = 60;
public void f()
{
Child c = new Child() {
public void f() {
// System.out.println("a = " + a); // This won't compile
System.out.println("b = " + b); // This compiles OK
}
};
}
}
i had read somewhere that anonymous class can access all members of enclosed class.
我假设你的意思是封闭 class 是的。但是 Child
不是封闭的 class 它是父级 class。在你的情况下封闭 class 将是 Hello.class
如果你添加它 private static int a;
即:
public class Hello {
private static int a = 40;
...
它会起作用。
您匿名覆盖 class 的事实与情况无关紧要。 class 无法访问其父项的 private
成员。如果您想访问父级的成员,您可以使用 protected
或默认可见性来定义它们。
package demo;
class Child{
private static int a=50;
public void fin() {
System.out.println("hello");
}
private void fly() {
System.out.println("lol");
}
}
public class Hello {
public static void main(String[] args)
{
Child c=new Child() {
public void f() {
System.out.println("sorry"+a);
}
public void fin() {
System.out.println("hello");
}
};
c.fin();
}}
以上是 java 的代码 我的观点是为什么不能在匿名 class 中调用私有方法和变量,因为我在某处读到匿名 class 可以访问所有成员封闭的 class.
https://www.baeldung.com/java-anonymous-classes
go checkout 指定匿名 class 的每个成员都可以访问封闭的 class.
关于 "inner class" 和 "anonymous class" 的代码存在混淆。
注意你有 3 个 class:
Child
Hello
Hello
:在Hello
内部声明的匿名 class,其父级是Child
代码中的混淆是关于后者的:
Hello
是Child
的子class
Hello
是Hello
的内部 class
这意味着:
Hello
无法从Child
访问私有字段,因为 subclasses 无法访问其 super classes 的私有元素
Hello
可以从Hello
访问私有字段,因为匿名内部 classes 可以访问其封闭 classes 的私有元素
这段代码看的更清楚:
class Child {
private int a = 50;
}
public class Hello {
private int b = 60;
public void f()
{
Child c = new Child() {
public void f() {
// System.out.println("a = " + a); // This won't compile
System.out.println("b = " + b); // This compiles OK
}
};
}
}
i had read somewhere that anonymous class can access all members of enclosed class.
我假设你的意思是封闭 class 是的。但是 Child
不是封闭的 class 它是父级 class。在你的情况下封闭 class 将是 Hello.class
如果你添加它 private static int a;
即:
public class Hello {
private static int a = 40;
...
它会起作用。
您匿名覆盖 class 的事实与情况无关紧要。 class 无法访问其父项的 private
成员。如果您想访问父级的成员,您可以使用 protected
或默认可见性来定义它们。