我有一个定义一些子类的超类。我有另一个类,它有一个方法,它将传递一个扩展超类的对象参数。如果对象的类型设置为超类,您是否仍然可以将子类传递给方法? 对不起,如果它没有意义。我可以添加一些代码作为示例。提前致谢
编辑:
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类型的对象,编译器会抛出步兵对象不是单位类型的错误吗?
答案 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);
}
}