有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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是抽象类的实例吗?我还尝试使用instanceof操作符作为System.out.println(objB instanceof B);,它返回我true

如果以上不是抽象类的对象,那么为什么上面的语句返回true


共 (1) 个答案

  1. # 1 楼答案

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

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

    instanceof
    

    这并不意味着“此变量属于该类型”,而是指此变量属于该类型,或者是从该类型继承的类型的实例。因此,在Java中的任何对象上: ^如果myObject被实例化,{}将返回true,无论myObject的实际类型如何

    在不创建具体且命名的子类的情况下,最接近实例化抽象类的方法是创建匿名实现:

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

    正如您所做的那样,上面的块不是抽象类的直接实例化

    这是一个新类的创建,您没有提供该类的名称,以及该类的实例化