我已经浏览了一些解释java中匿名内部类的编程站点。
但是,我仍然怀疑它是如何运作的以及我在下面得出的结论。
这是代码:
public class Implementing {
public static void main(String[] args) {
SuperClass a = new SuperClass() { // ... 1st
public void call () { // ... 2nd
System.out.println("Method call");
}
public void call2 () { // creating new method in anonymous inner class
System.out.println ("New call2 Method in Anonymous Class");
}
};
a.call(); // ... 3rd
try {
a.getClass().getMethod("call2",null).invoke(a,null); // ... 4th
} catch (Exeception e) {
System.out.println(e);
}
}
}
class SuperClass {
public void call() {
System.out.println("Super Class");
}
}
我的理解是:
第1名: -
匿名内部类是子类。
我们正在创建匿名内部类的实例以及我们 正在扩展SuperClass类。
我们正在运行SuperClass的构造函数,但我们创建了对象
SuperClass类型的匿名类。
工作中的多态性。
实际上,我们在第一时间这样做:
* 1. anonymousClass extends SuperClass
* 2. anonymousClass a = new SuperClass()
* 3. { }; // our anonymous class field
在第2位: - 覆盖SuperClass调用Method()。
在第3位: - 按对象'a'调用call()方法。
第4步: - 在匿名内部类中访问新方法call2()方法。
那么,我的这些结论是对还是错?如果错了,为什么他们错了?请解释一下。
答案 0 :(得分:0)
您的代码创建了Anonymous Class:
public static void main(String[] args) {
SuperClass a = new SuperClass() { // ... 1st
public void call() {
System.out.println("Method call");
}
public void call2() {
System.out.println("New call2 Method in Anonymous Class");
}
};
...
}
与创建Local Class的此代码相同:
public static void main(String[] args) {
class LocalClass extends SuperClass {
public void call() {
System.out.println("Method call");
}
public void call2() {
System.out.println("New call2 Method in Anonymous Class");
}
}
SuperClass b = new LocalClass();
...
}
除了该类未命名,即匿名。
由于您是从静态方法执行此操作,并且未使用任何局部变量,因此它们都与此Static Nested Class相同:
static class NestedClass extends SuperClass {
public void call() {
System.out.println("Method call");
}
public void call2() {
System.out.println("New call2 Method in Anonymous Class");
}
}
如果查看已编译的.class文件,您会发现它们都只是类:
SuperClass.class <-- Your superclass
Implementing.class <-- Your main class
Implementing$1.class <-- Anonymous class
Implementing$1LocalClass.class <-- Local class
Implementing$NestedClass.class <-- Nested class