返回主类而不是子类JAVA android的问题



我有一个函数,我希望它返回从同一类继承的子类之一。主类是button,继承类是button1, button2…我不明白当我的函数返回一些东西时,总是master类的特征突出。

我的最终目标是在角色用户的函数中传递按钮类的变量。在下面的示例中,只有名称。

下面是我如何声明类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";
...    
}
public static class Button2 extends Button {
final public static String name = "name 2";
...
}
这是函数
public static SettingsAdapter.Button getButtonPos(int a) {
if (a == 1) {
return Button1;
} else {
return Button2;
}

如果我们printf(getButtonPos(1).name)

输出始终为test

我想要的输出是name 1

如何使这个函数真正返回Button1或Button2的类?

我猜,静态关键字是问题所在。试着删除它

静态变量对于这个类的所有实例是相同的,所以每个子类from button的实例都有一个名为name的变量,值为"test"

button_1有另一个变量名为name,值为"name 1"。我认为java只取第一个。

类名也是用CamelCase写的,请重构它们。静态变量实际上可以通过ClassName.VariableName

访问如果没有static就不能工作,那么使用方法。在Button中创建一个方法:

public String getName(){
return "test"
}

,然后在子类中重写这个方法:

@Override
public String getName(){
return "name 1"
}

输出getName()的值

printf(getButtonPos(1).getName())
另一种方法是直接检索类
button1.getClass()

button1.getClass().getName()

当需要字符串时。

最新更新