0
A
回答
4
如果您重新定義子類中的靜態成員(方法或變量),則隱藏超類的定義。
public class Super
{
public static void methodA()
{
}
}
public class Sub extends Super
{
public static void methodA()
{
}
}
這裏靜態methodA
被重新定義的子類,但它不會覆蓋超類的methodA
。
調用Sub.methodA
將調用Sub
的methodA
。如果Sub
沒有methodA
,則調用Sub.methodA
可能會調用Super
的methodA
。
0
子類中的變量隱藏了超類中具有相同名稱的變量。
1
如果您在子類中重新定義靜態方法,則其被調用方法隱藏。靜態方法在編譯的時候,而不是運行時間都解決了,你叫他們基於類的就好說:
class A {
public static void mymthod() {}
}
class B extends A {
public static void mymthod() {}
}
你叫爲:
A a = new B();
a.mymthod();//resolved at compile time and associated with class A (compiler will warn although as static method doesnt necessarily need an object to call)
1
您可以看到自己與這個
class A {
static int x = 1;
int y = 1;
int f() {
return 1;
}
static int sf() {
return 1;
}
}
class B extends A {
static int x = 2;
int y = 2;
int f() {
return 2;
}
static int sf() {
return 2;
}
}
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
A b = new B();
System.out.println("A.x=" + ((A) b).x);
System.out.println("B.x=" + b.x);
System.out.println("A.y=" + ((A) b).y);
System.out.println("B.y=" + b.y);
System.out.println("A.f() = " + ((A) b).f());
System.out.println("B.f() = " + b.f());
System.out.println("A.sf() = " + ((A) b).sf());
System.out.println("B.sf() = " + b.sf());
}
}
它pprints:
斧= 1 Bx的= 1 ΔY= 1 通過= 1 AF()= 2 BF()= 2 A.sf()= 1 B.sf()= 1
人們會期望B.sf要被打印爲2但沒有。
同樣的人會期望B.x和B.y打印爲2,但也沒有,因爲字段也不是多態,只有函數。
我不確定這是否有很大的實用價值,人們一定會在做完一個錯誤後得知它。 雖然這可能會在更糟的求職面試中被問到。
相關問題
- 1. 在派生類中重新定義靜態常量值C++
- 2. 在PHP派生類中重寫靜態成員
- 3. python靜態成員初始化從派生類的靜態成員值
- 4. C++如何訪問派生類中的基類靜態成員?
- 5. 重新定義派生類中的typedef?
- 6. 重新定義C#中派生/嵌套類中的靜態字段
- 7. C++ - 派生類是否繼承基類的靜態成員?
- 8. 重新定義派生類的變量
- 9. C#:繼承單獨的靜態成員的派生類
- 10. C++派生類是否可以繼承基類的靜態數據成員和靜態成員函數?
- 11. 在其派生類中共享的基類中的靜態成員
- 12. Java中的靜態成員
- 13. 靜態數據成員但類型派生
- 14. 如何在派生類上強制實施靜態成員?
- 15. 如何在派生類中定義內部類成員?
- 16. memberwiseclone也會複製派生類中定義的成員嗎?
- 17. C++:靜態成員函數和變量 - 重新定義靜態變量?
- 18. 是默認靜態內部類的成員靜態在java中
- 19. 模板多態性派生類的大小沒有新成員
- 20. Python - 重新定義派生類中的類屬性
- 21. Java類的範圍靜態成員
- 22. 靜態類成員
- 23. 類定義爲另一個類的靜態成員
- 24. 結構靜態成員含義/定義
- 25. C#中的靜態派生類型?
- 26. C++派生類重寫與其他派生類的基類成員?
- 27. 委託給派生類的靜態方法定義(C++)
- 28. 避免「通過派生類型訪問類型的靜態成員」
- 29. 在派生類中爲成員變量使用派生類型
- 30. 覆蓋類中的派生成員
還不確定我明白,對不起。你能舉個例子嗎? – OPK
所以如果上面的方法不是靜態的,那麼它會覆蓋不重新定義,是否正確? – OPK
@ taimeili123是的,如果方法不是靜態的,子類中的方法將覆蓋超類中的方法。 – Eran