java - 如何从子类而不是父类(super class)获取数据字段?

标签 java inheritance polymorphism

我有一个名为 TestSuper 的父类(super class)

public class TestSuper {
  int a = 0;
}

我有 2 个名为 TestSubTestSub2 的子类,它们扩展了 TestSuper

public class TestSub extends TestSuper{
   int a=1;
}

public class TestSub2 extends TestSuper{
   int a=2;
}

在我的主类中,我创建了一个接受类型 TestSuper 并返回它的值的方法,在主类中我将它显示在控制台上

public class Main {
public static void main(String[] args){

    System.out.println(test(new TestSub())+" "+test(new TestSub2()));
}
public static int test(TestSuper b){
    return b.a;
}
}

但是输出是“0 0”而不是“1 2”,我该怎么办?

最佳答案

你需要转换引用,所以说出你想要哪个。

public static int test(TestSuper b){
    return b instanceof TestSub ? ((TestSub) b).a :
           b instanceof TestSub2 ? ((TestSub2) b).a :
           b.a;
}

如果这看起来不必要地复杂,那确实是。您应该改用多态性。

public class TestSuper {
    int a = 0;
    public int getA() { return a; }
}

public class TestSub extends TestSuper {
    int a = 1;
    public int getA() { return a; }
}

public class TestSub2 extends TestSuper {
    int a = 2;
    public int getA() { return a; }
}

public static int test(TestSuper b) {
    return b.getA();
}

关于java - 如何从子类而不是父类(super class)获取数据字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43155821/

相关文章:

java - 如何在Dialog android中设置videoView

java - 设置 ScrollView 的边距

java - 派生类属性的空输出

c++ - 模板和嵌套类型查找

java静态绑定(bind)和多态性

c# - 服务 - 客户端界面、架构建议

java - 字符串中第 N 次出现的字符并获取值

java - 当我在源中使用 try catch 时,-source 1.5 中不支持 try-with-resource 错误

c# - 如何将 Base 对象的引用更改为派生类型的派生对象

python - 子类化 Python str 类并与纯字符串进行字符串比较