关于java:我们可以实例化一个抽象类吗?

Can we instantiate an abstract class?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
LocationManager lm = getSystemService(Context.LOCATION_PROVIDER);
LocationProvider lp = lm.getProvider("gps");

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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");
    }
}

这也适用于接口。


不,不能实例化抽象类。这就是抽象类的目的。您所引用的getProvider方法返回抽象类的特定实现。这是抽象的工厂模式。


不,抽象类永远无法实例化。


据其他人说,不能从抽象类实例化。但它有两种使用方法。1。生成从抽象类扩展的另一个非Abstact类。因此,您可以从新类实例化并使用抽象类中的属性和方法。

1
2
3
4
    public class MyCustomClass extends YourAbstractClass {

/// attributes, methods ,...
}
  • 使用接口。