我们可以创建抽象类的对象吗?如果没有,为什么?

时间:2019-02-06 07:31:32

标签: java

我有一个带有两个抽象方法的抽象类B

public abstract class B
{
    public abstract void C();

    public abstract void D();
}

我正在尝试使用

创建抽象类的对象
B objB = new B(){

        @Override
        public void C() {

        }

        @Override
        public void D() {

        }};

ObjB是Abstract类的实例吗?另外,我尝试将instanceof的运算符设为System.out.println(objB instanceof B);,这将使我返回true

如果以上内容不是Abstract Class的对象,那么为什么以上语句返回true?

1 个答案:

答案 0 :(得分:1)

不,您不能立即实例化abstract类,其原因是:它是abstract

为了创建此类的实例,您必须创建一个子类,该子类为该类的所有抽象成员提供实现。 即使您没有添加任何抽象方法,这仍然适用。

instanceof

并不表示“此变量属于该类型”,而是该变量属于此类型,或者是从该类型继承的类型的实例。因此,在Java中的任何对象上: 无论myObject的实际类型如何,myObject instanceof Object如果实例化了myObject,将返回true。

最接近实例化抽象类而不创建具体的命名子类的方法是创建一个匿名实现:

B object = new B() {
            @Override
            public void C() {

            }

            @Override
            public void D() {

            }
}

上面的代码块并不是您对抽象类的直接实例化。

这是一个新类的创建,您没有为其提供名称,并对其进行实例化。

相关问题