[英]What is an anonymous inner class?
当我尝试在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);
}
};
}
}
匿名类是类的“嵌入式”具体实现,通常(但不一定)是抽象类或接口。 从技术上讲,它是扩展/实现的超类的子类。
谷歌更多。
在您的示例中,您的类(InnerClass)扩展了类(OuterClass)并实现了它们的抽象方法,这是扩展抽象类的典型行为。 以同样的方式,如果您的类实现了任何接口,则必须重写其抽象方法。 这是实现匿名内部类的方法。
基本上,匿名类是没有名称的实现,因此是“匿名”位。
这是使您的班级匿名的原因:
InnerClass myInnerClass = new InnerClass() {
@Override
void OuterClassMethod() {
int OuterClassVariable = 10;
System.out.println("OuterClassVariable" + " " + OuterClassVariable);
}
};
在普通的类实例化中,您将只使用:
InnerClass myInnerClass = new InnerClass();
但是在这种情况下,您要通过覆盖其中的一个函数( OuterClassMethod()
)来指定该类的新实现。 在InnerClass
其他实例中, InnerClass
OuterClassMethod()
仍将具有其原始实现,因为您仅调整了此特定的InnerClass
实例,而没有将这个新实现存储在新类中。
如果您不希望使用匿名类,请执行以下操作:
在某个地方,指定AnotherInnerClass
来扩展InnerClass
,并覆盖该函数:
class AnotherInnerClass extends InnerClass {
@Override
void OuterClassMethod() {
int OuterClassVariable = 10;
System.out.println("OuterClassVariable" + " " + OuterClassVariable);
}
};
然后实例化它:
AnotherInnerClass myInnerClass = new AnotherInnerClass();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.