对象类型可以由它的超类定义吗?

时间:2015-02-07 16:16:23

标签: java inheritance

我有一个定义一些子类的超类。我有另一个类,它有一个方法,它将传递一个扩展超类的对象参数。如果对象的类型设置为超类,您是否仍然可以将子类传递给方法? 对不起,如果它没有意义。我可以添加一些代码作为示例。提前致谢

编辑:

public class Unit {
  some code.
}

public class Infantry extends Unit {
  some code.
}

public class DamageCalculator {

public double calculateDamage(Unit unit, double damage) {
  Some code.
}

如果我传递一个Infantry类型的对象,编译器会抛出步兵对象不是单位类型的错误吗?

1 个答案:

答案 0 :(得分:2)

您的示例将编译得很好。由于步兵的实例是一种单位,你可以将它传递给方法calculateDamage。编者会对此感到满意。任何方法calculateDamage对单元的调用都会在Unit或步兵上调用适当的方法(如果已在子类中重写)。这被称为"运行时多态性"。

public class Unit { }

public class Infantry extends Unit {  }

public class DamageCalculator {

    public double calculateDamage(Unit unit, double damage) { 
        return damage; // presumably return unit.getStrength() * damage;
    }

}

public class Main {
    public static void main(String [] a) {
        Unit i = new Infantry();
        DamageCalculator damageCalculator = new DamageCalculator();
        double damage = 0.1;
        double result = damageCalculator.calculateDamage(i, damage);
    }
}