我有一個基類和子類。基類有我想在子類中使用的常用方法和實現,但我想使用子類成員變量而不是超類。我不想在子類中重寫相同的方法。 Java中有沒有辦法實現這一點。在超類方法中使用子類成員變量?
回答
您可以使用方法訪問成員並在子類中覆蓋它。
Class A{
public void DoStuff(){
int aux = getResource;
/*cool things with aux*/
}
protected int getResource(){
return internal_member;
}
private int internal_member;
}
Class B extends A{
private int another_member;
@Override
public int getResource(){
return another_member;
}
}
但考慮到這不會阻止人們直接使用成員換款A級,這可能是更好的創建成員和干將的基類。
另一種選擇,像有些人之前列出是有數據成員在基類的保護,並在子類中初始化:
Class A{
public void DoStuff(){
/*cool things with internal_member*/
}
protected List internal_member;
A(){internal_member = /*Set here a value*/}
}
Class B extends A{
B(){internal_member = /*Set a different value here! you can even declare a member and assign it here*/}
}
如果您可以根據需要使用的構造方法的參數。
這是看起來很奇怪的Java代碼。它看起來幾乎像C++對我來說。 – 2013-03-10 22:41:45
@HovercraftFullOfEels謝謝!我整天都用C++,當我寫出答案時,我做得很快,並沒有意識到!大聲笑 – 2013-03-11 08:53:07
我有這樣的事情:public class Base { List A; 鹼(){ this.A = A } 公共doSomethingOnList(){} } 公共子延伸基地{ @override 列表B; child(){ super(); this.B = B } } 我想doSomethingOnList()方法在基類中定義使用Child類List B而不是List A.我不想在子類中寫同樣的方法。繼承是否照顧到這一點,或者我必須編寫setter? – user2154810 2013-03-11 11:34:06
您可以創建的成員變量&一個protected
二傳手然後子類的構造函數中覆蓋超類的變量的值:
class Animal {
private String voice = "Oooo";
protected void setVoice(String voice) {
this.voice = voice;
}
public void speak() {
System.out.println(this.voice);
}
}
class Dog extends Animal {
public Dog() {
setVoice("woof");
}
}
謝謝大家!上述討論對我很有幫助 – user2154810 2013-03-11 15:09:27
- 1. 使用超類方法在子類中
- 2. Python類設計:直接在方法中使用成員變量或將成員變量傳遞給方法?
- 3. 如何在一個子類中訪問超類中的私有成員變量?
- 4. 在抽象類方法中使用實例化的類成員作爲變量
- 5. 在超類中聲明子類變量
- 6. 如何在靜態方法中調用類的成員變量?
- 7. 到達子類的成員從超類
- 8. 在方法內改變類成員?
- 9. 在派生類中爲成員變量使用派生類型
- 10. 在超類方法中修改子類的不可變/受保護的變量
- 11. 在超類中使用子類的靜態變量
- 12. 子類的靜態成員變量
- 13. 使繼承的方法使用子類的變量而不是超類'
- 14. 調用變量到超類的子類
- 15. 修改和設置類成員變量的類方法
- 16. 超類/子類方法
- 17. 如何在抽象超類中使用子類中的方法
- 18. 在Java中訪問變量的超類成員?
- 19. 使用成員類型的模板類作爲類成員變量
- 20. 參考成員變量的類成員
- 21. 如何使用子類的實例訪問超類的成員
- 22. 超類對象可能引用未繼承的子類成員方法嗎?
- 23. 從超類的向量中調用子類方法C++
- 24. 我想在超類的方法中使用超類實例變量作爲參數,在改變子類中實例變量的值
- 25. 如何在超類方法的參數中使用子類?
- 26. 如何在子類中使用超類方法java
- 27. 如何在超類方法中使用子類參數?
- 28. 從子類中提供抽象類成員變量
- 29. fstream類成員變量
- 30. 抽象類成員變量
不能覆蓋領域,但是你可以重寫getter方法,等等我認爲一種可能的解決方案是使用* getter *方法來獲取字段。 – 2013-03-10 21:50:07
你能更具體一點你想達到什麼嗎?我可以想象一個抽象類是你正在尋找的。 – Trinimon 2013-03-10 22:10:23