如何创建抽象类和接口的对象

gau*_*tam 16 java abstract-class interface

如何创建抽象类和接口的对象?我知道我们不能直接实例化抽象类的对象.

wkl*_*wkl 13

您无法实例化抽象类或接口 - 您可以实例化其子类/实现者之一.

这种事情的例子在Java Collections的使用中是典型的.

List<String> stringList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

您使用接口类型List<T>作为类型,但实例本身是一个ArrayList<T>.


Mar*_*cin 9

要创建抽象类的对象,只需使用new就像创建其他非抽象类的对象一样,只有一个小差异,如下所示:

package com.my.test;

public abstract class MyAbstractClass {
    private String name;

    public MyAbstractClass(String name)
    {
        this.name = name;
    }

    public String getName(){
        return this.name;
    }


}

package com.my.test;

public class MyTestClass {

    public static void main(String [] args)
    {
        MyAbstractClass ABC = new MyAbstractClass("name") {
        };

        System.out.println(ABC.getName());
    }

}
Run Code Online (Sandbox Code Playgroud)

以同样的方式您可以创建接口类型的对象,如下所示:

package com.my.test;

public interface MyInterface {

    void doSome();
    public abstract void go();

}

package com.my.test;

public class MyTestClass {

    public static void main(String [] args)
    {

        MyInterface myInterface = new MyInterface() {

            @Override
            public void go() {
                System.out.println("Go ...");

            }

            @Override
            public void doSome() {
                System.out.println("Do ...");

            }
        };

        myInterface.doSome();
        myInterface.go();
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 这不是抽象类或接口的对象.这是一个扩展(实现)所述抽象类(接口)的匿名类.巨大的概念差异. (11认同)

Mah*_*iya 5

有两种方法可以实现这一目标。

1)要么在新类中扩展/实现抽象类/接口,创建这个新类的对象,然后根据您的需要使用该对象。

2) 编译器允许您在代码中创建接口的匿名对象。

例如。( 新的 Runnable() { ... } );

希望这可以帮助。

问候,马亨德拉·利亚。


Ign*_*ams 2

您编写一个派生自抽象类或实现该接口的类,然后实例化它。