我有一个超类和一个子类。在超类中,我尝试使用方法从子类中获取变量。我有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对象(实例?),我如何获取值?提前谢谢!
答案 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;
}
}
请注意
getHealth
的实现使用自己的变量,而在第二种情况下,调用超级类getHealth()
并将其乘以2.这只是一个用法示例。 修改
显然,这种设计适用于方法的非平凡实现,即当方法实现某些逻辑时。在您的情况下,您可以通过构造函数传递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。