我试图找出,如果可以创建匿名内部类作为抽象。我想,它没有意义,因为我试图创建抽象类的实例,但编译器的消息让我感到困惑:
“从Test派生的匿名类”必须是声明为abstract ,或者在Test
代码:
abstract class Test{
abstract void method();
}
Test o = new Test(){};
如果可以将匿名类声明为抽象类,请告诉我如何执行此操作。
我很乐意回答。
答案 0 :(得分:5)
见JLS Sec 15.9.5(强调我的):
15.9.5。匿名类声明
Java编译器会自动从类实例创建表达式派生出一个匿名类声明。
匿名类永远不抽象(§8.1.1.1)。
匿名类总是隐含最终的(§8.1.1.2)。
匿名类始终是内部类(第8.1.3节);它永远不会是静态的(§8.1.1,§8.5.1)。
答案 1 :(得分:0)
你不能也没有意义将匿名类声明为抽象类,因为匿名只被用作本地类一次。
我认为您因为类似问题Class must either be declared abstract or implement abstract method error
而收到此错误答案 2 :(得分:0)
正如Andy Turner引用的那样,你的问题的答案是否定的。
但是我想你想知道不同的东西。
为什么会收到此编译器消息?
编译器在这里有点误导。它提供了两种可能的解决方案,基于您声明一个类(该匿名类),然后还要创建该类的实例:
所以要解决您的实际问题:只需实现method()
,这样您的匿名类声明就不再包含抽象方法
abstract class Test{
abstract void method();
}
Test o = new Test()
{
void method()
{
// do something
};
};
现在声明了一切,编译器不应该再抱怨了。