我们可以实例化一个抽象类吗?

sat*_*oid 35 java oop android class abstract

我已经读过我们只能通过继承它来实例化一个抽象类,但我们不能直接实例化它.
但是,我看到我们可以通过调用另一个类的方法来创建一个具有抽象类类型的对象.
例如 - LocationProvider是一个抽象类,我们可以通过调用类中的getProvider()函数来实例化它LocationManager:

LocationManager lm = getSystemService(Context.LOCATION_PROVIDER);
LocationProvider lp = lm.getProvider("gps");
Run Code Online (Sandbox Code Playgroud)

抽象类如何在这里实例化?

kir*_*uku 84

您不能直接实例化抽象类,但可以在没有具体类时创建匿名类:

public class AbstractTest {
    public static void main(final String... args) {
        final Printer p = new Printer() {
            void printSomethingOther() {
                System.out.println("other");
            }
            @Override
            public void print() {
                super.print();
                System.out.println("world");
                printSomethingOther(); // works fine
            }
        };
        p.print();
        //p.printSomethingOther(); // does not work
    }
}

abstract class Printer {
    public void print() {
        System.out.println("hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

这也适用于接口.

  • @Cupidvogel:因为它不公开/不知道键入`Printer`. (3认同)
  • 我们可以在抽象类中有函数定义吗? (2认同)

Dar*_*rov 22

不,你永远不能实例化一个抽象类.这是抽象类的目的.getProvider您引用的方法返回抽象类的特定实现.这是抽象的工厂模式.


Pra*_*ain 5

不,抽象类永远不能被实例化.