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

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

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

3个回答

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

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

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

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

比如:

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

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

specter_club
specter_club 抽象类并不是接口,所以不能用implements 关键字,应该用extends 关键字
一年多之前 回复
qq_29153555
penguinDada 是extends A 哟
2 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问