当我尝试在Java中的abstract class
上做一些示例时,我偶然得到了一些像Eclipse中的匿名内部类。
我已粘贴下面的代码。我不明白abstract class
与匿名类的关系。
package com.Demo;
abstract class OuterClass {
abstract void OuterClassMethod();
}
public abstract class InnerClass extends OuterClass {
public static void main(String[] args) {
InnerClass myInnerClass = new InnerClass() {
@Override
void OuterClassMethod() {
int OuterClassVariable = 10;
System.out.println("OuterClassVariable" + " " + OuterClassVariable);
}
};
}
}
答案 0 :(得分:1)
匿名类是类的“内联”具体实现,通常(但不一定)是抽象类或接口。它在技术上是扩展/实现的超类的子类。
Google了解更多信息。
答案 1 :(得分:0)
在您的示例中,您的类(InnerClass)扩展了类(OuterClass)并实现了它们的抽象方法,这是扩展抽象类的典型行为。以同样的方式,如果您的类实现任何接口,您必须覆盖其抽象方法。这是实现Anonymous内部类的方法。
答案 2 :(得分:0)
基本上,匿名类是一个没有名称的实现 - 因此是“匿名”位。
这一点让你的班级匿名:
InnerClass myInnerClass = new InnerClass() {
@Override
void OuterClassMethod() {
int OuterClassVariable = 10;
System.out.println("OuterClassVariable" + " " + OuterClassVariable);
}
};
在普通的类实例中,您只需使用:
InnerClass myInnerClass = new InnerClass();
但在这种情况下,您通过覆盖其中的函数(OuterClassMethod()
)来指定该类的新实现。在InnerClass
的其他实例中,OuterClassMethod()
仍将具有其原始实现,因为您只调整了此InnerClass
的特定实例,并且未将此新实现存储在新类中。
如果您不想要匿名课程,请改为:
某处,指定AnotherInnerClass
以扩展InnerClass
,并覆盖该功能:
class AnotherInnerClass extends InnerClass {
@Override
void OuterClassMethod() {
int OuterClassVariable = 10;
System.out.println("OuterClassVariable" + " " + OuterClassVariable);
}
};
然后将其实例化为:
AnotherInnerClass myInnerClass = new AnotherInnerClass();