Javaプログラミングでは、抽象クラスの静的メソッドを呼び出すことはできますか?
はい、抽象クラスのメソッドで static を使用できないことはわかっています。しかし、私は理由を知りたい.. ?
5 に答える
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 の作成者はそれがインターフェイスの誤用を助長すると感じていたのではないかと思います)
Java について話している場合、答えは「はい」ですが、静的メソッドを定義する必要があります。抽象静的メソッドを作成することはできません。作成できるのは、非抽象静的メソッドです。
理由は、静的メソッドにアクセスするためにオブジェクト インスタンスが必要ないため、メソッドを特定の機能で定義する必要があるからです。
だからあなたは持つことができません、
abstract class AbstractClassExample{
abstract static void method();
}
しかし、あなたは持つことができます、
abstract class AbstractClassExample{
static void method(){}
}
お役に立てれば...
はい、もちろん、抽象クラスで静的メソッドを定義できます。抽象クラスを使用するか、抽象クラスを拡張する子クラスを使用して、その静的メソッドを呼び出すことができます。また、子クラスのインスタンス/オブジェクトを介して静的メソッドを呼び出すこともできます。次の例でさらにテストを説明します。
//Parent class
public abstract class TestAbstractClass {
static void testStaticMethod(){
System.out.println("In Parent class static method");
}
}
//child class
public class ChildClass extends TestAbstractClass {
public static void main(String[] args) {
TestAbstractClass parentObj = new ChildClass();
parentObj .testStaticMethod();
ChildClass childObj = new ChildClass();
childObj.testStaticMethod();
TestAbstractClass.testStaticMethod();
childClass.testStaticMethod();
}
}