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

Can an objects type be defined by it's super class?

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

编辑:

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 类型的对象,编译器会抛出步兵对象不是 unit 类型的错误吗?

您的示例可以正常编译。由于 Infantry 的实例是一种 Unit,您可以将其传递给 calculateDamage 方法。编译器会对此感到满意。如果已在子 class 中覆盖,对单位调用的任何方法 calculateDamage 将调用单位或步兵的适当方法。这叫做"runtime polymorphism"。

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);
    }
}