超类方法获取子类变量

时间:2014-12-03 14:50:34

标签: java subclass superclass

我有一个超类和一个子类。在超类中,我尝试使用方法从子类中获取变量。我有2个子类,每个子类在这个变量上有不同的值。我该怎么做呢?这就是它的样子:

public class SuperClass{

protected int health;

public int getHealth()
{
    return health;
}

然后我有我的子类:

public class SubClass1 extends SuperClass{

private int health = 30;

public SubClass1() {
    super();
}
}

public class SubClass2 extends SuperClass{

private int health = 50;

public SubClass2() {
    super();
}
}

然后我尝试使用JTestUnit进行测试:

public class SubClass1{

@Test
public void testGetHealth()
{
    SubClass1 unit = new SubClass1();
    assertEquals(unit.getHealth(), 30);
}

但它不起作用。如果我正在创建的SubClass1或SubClass2对象(实例?),我如何获取值?提前谢谢!

3 个答案:

答案 0 :(得分:3)

删除

private int health = 30;

声明一个新变量,其名称隐藏了超类中的变量。

并在构造函数中初始化

public SubClass2() {
    super();
    health = 30;
}

答案 1 :(得分:1)

您必须为每个子类重写方法getHealth(),即

public class SuperClass{
    protected int health;

    public int getHealth() {
        return health;
    }
}


public class SubClass{
    private int health;

    public int getHealth() {
        return health;
    }
}

public class SubClass{
    public int getHealth() {
        return super.getHealth() * 2;
    }
}

请注意

  1. 我按照惯例重命名了应该以大写字母开头的课程。
  2. 第一种情况下getHealth的实现使用自己的变量,而在第二种情况下,调用超级类getHealth()并将其乘以2.这只是一个用法示例。
  3. 修改

    显然,这种设计适用于方法的非平凡实现,即当方法实现某些逻辑时。在您的情况下,您可以通过构造函数传递health

    public class SuperClass{
        protected int health;
        public SuperClass(int health) {
            this.health = health;
        }
        public int getHealth() {
            return health;
        }
    }
    
    
    public class SubClass1{
        public SuperClass1(int health) {
            super(health);
        }
    }
    
    public class SubClass2{
        public SuperClass2(int health) {
            super(health);
        }
    }
    

    但是,只要案例非常简单,那么根本不需要创建子类,因此您可以创建超类并创建包含不同健康值的实例:

    SuperClass c1 = new SuperClass(1);
    SuperClass c2 = new SuperClass(2);
    

答案 2 :(得分:0)

如果您想要特定物品的健康价值,您应该返回this.health。