关于Java抽象类实例化的问题

大家都知道抽象类不能被实例化
例如有个抽象类A
内有一个抽象方法public abstract void test();
A a = new A();是不行的

A a = new A(){
public void test(){ }
};
就ok 看起来就是调用构造函数的时候顺便重写了test()。。 还有这种操作吗。。这样写的原理是什么?

这样写相当于定义了一个派生的匿名类,这个类实现了test方法,它不是抽象的了,所以可以实例化。

1.你也知道抽象类不能被实例化;
2.以下代码却可以:

 A a = new A(){
public void test(){ }
};

抽象类不是不可以被实例化,而是需要先实现抽象类的抽象方法,然后才能实例化;

比如:

class B implements A{
    @Override
    public void test(){ }
    };
}

在这之后,就可以A a = new B();
这是同一个道理。

A a = new A(){
public void test(){ }
};
就是创建了匿名类,就相当于定一个类B extends A然后重写父类A的抽象方法,只不过这里是没有取名字