我有一個函式,我想讓它回傳繼承自同一類的子類之一。 主類是button,繼承類是button1, button2 ... 我不明白當我的函式回傳一些東西時,總是主類的特征被突出。
我的最終目標是在一個角色用戶的函式中傳遞一個按鈕類的變數。 在下面的例子中,只有名字。
下面是我如何宣告類Button1、Button2和主類button。
...
public static Button1 Button1。
public static Button2 Button2;
SettingsAdapter() {
Button1 = new Button1() 。
Button2 = new Button2();
}
public static class Button{
final public static String name = "test"。
...
}
/*** line 1 ***/; ...
public static class Button1 extends Button {
final public static String name = "name 1"/span>;
...
}
public static class Button2 extends Button {
final public static String name = "name 2"/span>。
...
}
這里是函式的內容
public static SettingsAdapter. Button getButtonPos(int a) {
if (a == 1) {
return Button1;
} else {
return Button2;
如果我們printf(getButtonPos(1).name)/code>
輸出總是test。
我想要的輸出是name 1
我怎樣才能使這個函式真正回傳Button1或Button2的類呢?
uj5u.com熱心網友回復:
我的猜測是,靜態關鍵詞是問題所在。試著去掉它。
靜態變數對這個類的所有實體都是一樣的,所以每個來自button的子類實體都有一個名為name的變數,其值為"test"。
然后button_1有一個名為name的變數,值為"name 1"。我認為java只取第一個。
另外,類的名字是用CamelCase寫的,請重構它們。靜態變數事實上可以用ClassName.VariableName
如果沒有靜態變數也不行,那就使用方法。 在Button中制作一個方法:
public String getName(){
return "test"。
}
并在子類中覆寫這個方法:
@Override
public String getName(){
return "name 1"。
}
在列印getName()的值。
printf(getButtonPos(1).getName()
另一種方法是直接檢索這個類
button1.getClass()
或者
button1.getClass() .getName()
當需要一個字串時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/328116.html
標籤:
上一篇:方法是將"自我"作為一個引數變數
