我怎么能调用Abstract类的非静态方法,而不使用它的子类或扩展它,因为Abstract类和子类太复杂了,所以我不想引起任何副作用。
例如,抽象类的具体静态方法可以使用类名点运算符来调用,而无需创建子类。可以使用任何方法来调用非静态方法。
我只想运行一个方法,而我不想运行任何其他代码。我尝试使用反射,但是需要实例
答案 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();