【发布时间】:2021-10-31 09:12:44
【问题描述】:
我在匿名类实现方面没有遇到任何特殊问题,但我在玩弄的时候注意到了一些让我觉得很有趣的东西。假设我有以下课程:
public class Foo {
public void foo() {
System.out.println("foo");
} // foo
} // Foo
在主类中,我有以下内容:
public class Main {
public final Foo foo;
public static void main(String[] args) {
foo = new Foo() {
public String test = "test";
@Override
public void foo() {
super.foo();
test = test + test;
System.out.println(test);
} // foo
} // anonymous override
// following line throws exception
// System.out.println(foo.test);
for (int i = 0; i < 3; i++) {
foo.foo();
} // for
} // main
以下是打印到控制台的内容:
foo
test
foo
testtest
foo
testtesttesttest
无论我做什么,都无法从匿名覆盖之外访问String test。即使我删除了“test = test + test”这一行并将 test 声明为 static 和 final,它仍然无法从匿名实现之外访问。
在这种情况下我没有特别需要使用变量,但是这让我很好奇我是否在这里遗漏了一些东西。只是,如果我需要将一个新变量嵌入到覆盖中,就像我在上面的示例中所做的那样。有没有什么方法可以在匿名覆盖之外访问变量“test”而不使用“父”类中的抽象方法或变量?
【问题讨论】:
-
我认为这里的班级是匿名的这一事实没有什么特别之处。你可以用外部的具体实现来做同样的事情
-
您的代码无法编译
-
我希望输出是 testtest、testtesttesttest、testtesttesttesttesttesttesttest,因为你在打印之前加倍。
标签: java variables overriding anonymous-class