对象类型可以由它的超级 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);
}
}
我有一个定义了一些子 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);
}
}