Java 嵌套类匿名类
有人能帮我理解这行代码吗Java 嵌套类匿名类,java,oop,nested-class,Java,Oop,Nested Class,有人能帮我理解这行代码吗 public class A { protected int x; public A(int x) { this.x = x; } public void g() { System.out.println(x); } public void h() { System.out.println(x + 10); } } public class B { public void f() { (new A(2) { public void g()
public class A {
protected int x;
public A(int x) { this.x = x; }
public void g() { System.out.println(x); }
public void h() { System.out.println(x + 10); }
}
public class B {
public void f() {
(new A(2) {
public void g() {
h();
}
}).g();
}
}
public static void main(String[] args) {
new B().f();
}
我不明白他是否定义了一个匿名类??以及如何在匿名中引用A.h()?这一行创建了一个未命名的类,该类重写父类的
g()
方法,这样它就做了一件新事情:调用h()
。但是,它会立即对这个未命名的类调用g()
方法。您引用的行定义了一个新的匿名类,该类扩展了一个,并覆盖g()
,然后调用它
由于匿名类扩展了A,它包含了h()
的定义,因此可以调用它他创建了一个匿名类,还覆盖了g()
。这与使用Runnable
和override
run时相同
new A(2) { public void g() {h();} }).g();
意味着
所以A(2)这里不是新类的名称,它是非名称类的父类,而不是重写A?请更正meA(2)意味着这个新的匿名类立即用构造函数参数2实例化。
(new A(2) { public void g() {h();} }).g();
class C extends A
{
public C()
{
super(2);
}
@Override
public void g()
{
this.h();
}
}
(new C()).g(); // or C c = new C(); c.g();