我们可以在抽象类中使用静态方法吗?

2022-08-31 20:11:52

在Java编程中,我们可以调用抽象类的静态方法吗?
是的,我知道我们不能在抽象类的方法中使用静态。但我想知道为什么。?


答案 1

在Java中,您可以在抽象类中有一个静态方法:

abstract class Foo {
   static void bar() { }
}

这是允许的,因为可以直接调用该方法,即使您没有抽象类的实例:

Foo.bar();

但是,出于同样的原因,不能将静态方法声明为抽象方法。通常,编译器可以保证抽象方法在调用时具有真正的实现,因为您无法创建抽象类的实例。但是,由于静态方法可以直接调用,因此将其抽象化将使调用未定义的方法成为可能。

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

// Calling a method with no body!
Foo.bar();

在接口中,所有方法都是隐式抽象的。这就是接口无法声明静态方法的原因。(接口不能具有静态方法的体系结构原因没有,但我怀疑JLS的作者认为这会鼓励滥用接口)


答案 2

如果你正在谈论java,答案是肯定的,但你需要定义静态方法。不能创建抽象的静态方法。您可以创建的是非抽象静态方法。

原因是您不需要对象实例来访问静态方法,因此您需要使用特定功能定义该方法。

所以你不能有,

  abstract class AbstractClassExample{
     abstract static void method();


}  

但你可以有,

abstract class AbstractClassExample{

     static void method(){}
}  

希望这有帮助...


推荐