如何调用Abstract类的非静态方法

时间:2018-08-02 07:53:44

标签: java abstract-class

我怎么能调用Abstract类的非静态方法,而不使用它的子类或扩展它,因为Abstract类和子类太复杂了,所以我不想引起任何副作用。

例如,抽象类的具体静态方法可以使用类名点运算符来调用,而无需创建子类。可以使用任何方法来调用非静态方法。

我只想运行一个方法,而我不想运行任何其他代码。我尝试使用反射,但是需要实例

2 个答案:

答案 0 :(得分:4)

抽象类是抽象,这意味着您无法创建该类的实例。

因此,您不能调用抽象类的实例方法

public abstract class Foo {
   static void bar();
   void foobar();
}

您可以调用Foo.bar(),因为它不是实例方法(这意味着它不需要类的实例),但是您不能调用foobar(),因为您不能执行new Foo().foobar()

Foo.bar(); // OK, we don't need an instance.

Foo foo = new Foo(); // Not OK - we cannot instantiate an abstract class.
foo.foobar();

有关无需使用派生类来创建抽象类实例的方法,请参见ernest_k's answer,使用匿名类

答案 1 :(得分:3)

简短的答案是您不能这样做。您需要一个实例。

创建实例的一种简单方法是使用匿名类:

AbstractClass o = new AbstractClass(){
    //implement abstract methods... or just leave stubs
};

o.concreteMethod();