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

时间:2011-01-02 16:32:54

标签: java android class oop abstract

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

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

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

4 个答案:

答案 0 :(得分:79)

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

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");
    }
}

这也适用于接口。

答案 1 :(得分:22)

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

答案 2 :(得分:5)

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

答案 3 :(得分:0)

据别人说,你无法从抽象类中实例化。但它有两种使用方式。 1.创建另一个从抽象类扩展的非抽象类。因此,您可以从新类实例化并使用抽象类中的属性和方法。

    public class MyCustomClass extends YourAbstractClass {

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