Java: 从匿名 class 获取超级 class
Java: Get super class from an anonymous class
在 Java 中,我在扩展 B 的 class A 中使用匿名 class。如何从这个匿名 class 访问 B?我不能使用关键字 super
,因为这意味着匿名 class 的 super class,而不是 super class 的 A.
public class A {
void foo() {
System.out.println("Good");
}
}
public class B extends A {
void bar() {
Runnable r = new Runnable() {
@Override
public void run() {
foo(); // Bad: this call B.foo(), not A.foo()
// super.foo(); // Bad: "Method foo is undefined for type Object"
}
};
r.run();
}
@Override
void foo() {
System.out.println("Bad");
}
}
在 run
中,您可以将 foo()
更改为 B.super.foo();
,然后我更改 运行 B.bar()
我得到 Good
。
在这种情况下,您需要限定this
以捕获外部class、B
B.this.foo()
或者,在您的情况下,如果您想要超级 class,请使用
B.super.foo()
Java 语言规范的相关部分:
休假请来电:
B.super.foo();
此更改后 B
class 如下所示:
public class B extends A {
public static void main(String[] args) {
new B().bar();
}
void bar() {
Runnable r = new Runnable() {
@Override
public void run() {
B.super.foo(); // this calls A.foo()
}
};
r.run();
}
@Override
void foo() {
System.out.println("Bad");
}
}
在 Java 中,我在扩展 B 的 class A 中使用匿名 class。如何从这个匿名 class 访问 B?我不能使用关键字 super
,因为这意味着匿名 class 的 super class,而不是 super class 的 A.
public class A {
void foo() {
System.out.println("Good");
}
}
public class B extends A {
void bar() {
Runnable r = new Runnable() {
@Override
public void run() {
foo(); // Bad: this call B.foo(), not A.foo()
// super.foo(); // Bad: "Method foo is undefined for type Object"
}
};
r.run();
}
@Override
void foo() {
System.out.println("Bad");
}
}
在 run
中,您可以将 foo()
更改为 B.super.foo();
,然后我更改 运行 B.bar()
我得到 Good
。
在这种情况下,您需要限定this
以捕获外部class、B
B.this.foo()
或者,在您的情况下,如果您想要超级 class,请使用
B.super.foo()
Java 语言规范的相关部分:
休假请来电:
B.super.foo();
此更改后 B
class 如下所示:
public class B extends A {
public static void main(String[] args) {
new B().bar();
}
void bar() {
Runnable r = new Runnable() {
@Override
public void run() {
B.super.foo(); // this calls A.foo()
}
};
r.run();
}
@Override
void foo() {
System.out.println("Bad");
}
}