在Java編程中,我們可以調用一個抽象類的靜態方法嗎?
是的我知道我們不能用抽象類的方法使用靜態。但我想知道爲什麼..?我們可以在抽象類中使用靜態方法嗎?
35
A
回答
41
在Java中,你可以在一個抽象類的靜態方法:
abstract class Foo {
static void bar() { }
}
這是允許的,因爲這種方法可以直接調用,即使你沒有抽象類的一個實例:
Foo.bar();
但是,出於同樣的原因,你不能聲明靜態方法是抽象的。通常情況下,編譯器可以保證抽象方法在調用任何時候都會有一個真正的實現,因爲你不能創建一個抽象類的實例。但是由於可以直接調用靜態方法,因此將其抽象化可以調用未定義的方法。
abstract class Foo {
abstract static void bar();
}
// Calling a method with no body!
Foo.bar();
在接口中,所有的方法都是implicitly abstract。這就是接口無法聲明靜態方法的原因。 (沒有任何體系結構的原因,爲什麼一個接口不能有一個靜態的方法,但我懷疑JLS的作者認爲這會鼓勵濫用接口)
17
如果你在談論java,答案是是的但是你需要定義靜態方法。你不能創建一個抽象的靜態方法。你可以創建的非抽象靜態方法是。
原因是您不需要訪問靜態方法的對象實例,因此您需要使用某種功能來定義該方法。
所以你不能擁有,
abstract class AbstractClassExample{
abstract static void method();
}
但你可以有,
abstract class AbstractClassExample{
static void method(){}
}
希望這有助於...
2
是的,當然你也可以定義抽象的靜態方法類。 您可以通過使用抽象類或使用擴展抽象類的子類調用該靜態方法。還可以通過子類實例/對象調用靜態方法。 說明下面的例子進一步測試。
//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();
}
}
1
這裏有一個簡單的方法explanation.Abstract必須實現later.We知道靜態方法不能被重寫,因爲靜態方法不屬於任何特定實例,而它屬於類所不同的實施抽象方法是靜態的,在不同的類中是違反直覺的。
相關問題
- 1. 我們可以使用對象訪問靜態方法嗎?
- 2. 我可以在抽象類中創建靜態工廠方法嗎?
- 3. 我們可以在java中創建公共靜態抽象類嗎?
- 4. 我們可以稱抽象類A的方法M1嗎?
- 5. from/where我可以在類中調用靜態類方法嗎?
- 6. 抽象掉在靜態方法在非靜態類類型
- 7. 我可以使用類方法來設置靜態變量嗎?
- 8. 我們可以把getter和setter放在抽象類中嗎?
- 9. 我可以在Objective-C中內聯靜態類方法嗎?
- 10. free_function可以是靜態類方法嗎?
- 11. 抽象類和靜態方法
- 12. 抽象類的靜態方法
- 13. 我可以在java的靜態方法中使用非靜態變量嗎?
- 14. 從抽象類中的靜態方法調用非靜態方法(C++)
- 15. 爲什麼我們在java中使用抽象類和抽象方法
- 16. 我可以在靜態方法在頂點使用非靜態變量嗎?
- 17. 我們可以有一個虛擬的靜態方法嗎? (C++)
- 18. 使用JMockit抽象類中的非公共靜態方法?
- 19. 我們可以在java中使用子類對象調用sleep()方法嗎?
- 20. 我們可以創建對象到接口和抽象類嗎?
- 21. 我們可以在java的非靜態類中有靜態塊嗎?
- 22. 在java中的靜態方法,我可以以非靜態方式訪問靜態方法嗎?
- 23. 我可以通過名稱調用類的靜態方法嗎?
- 24. 靜態抽象類
- 25. 我們可以在Java中沒有對象的情況下調用非靜態類的方法嗎?
- 26. 靜態抽象方法解決方法
- 27. 我可以從Worker線程調用靜態類實例的靜態方法嗎?
- 28. 我可以使用調用抽象類的方法
- 29. 我們可以在靜態類中使用私有構造函數嗎?
- 30. 程序類中的抽象方法vs靜態方法
注意:從java 8開始,您可以在接口中聲明靜態方法和默認方法 – user2243357