返回 main class 而不是 subclass JAVA android 的问题

Problem of Returning the main class instead of the subclass JAVA android

我有一个函数,我希望它 return 继承自同一个 class 的子class之一。 主 class 是按钮,继承 class 是按钮 1、按钮 2 ... 我不明白什么时候我的功能return是什么东西总是突出大师class的特点。

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

这是我声明 class Button1Button2 和主要 class 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

如何使这个功能真正成为 return Button1 或 Button2 的 class?

我的猜测是静态关键字是问题所在。尝试删除它。

此 class 的所有实例的静态变量都相同,因此来自按钮的 sublclass 的每个实例都有一个名为 name 且值为 "test" 的变量。

然后 button_1 有另一个名为 name 的变量,其值为 "name 1"。我觉得java只拿第一个。

还有class名字是CamelCase,请重构。静态变量实际上可以通过 ClassName.VariableName

访问

如果没有静态就不行,那就使用方法。 在Button中做一个方法:

public String getName(){
    return "test"
}

并在 subclasses:

中覆盖此方法
@Override
public String getName(){
    return "name 1"
}

在打印 getName() 的值时。

printf(getButtonPos(1).getName())

另一种方法是直接检索class

button1.getClass()

button1.getClass().getName()

当需要字符串时。