假设我有一个名为 Fish 的超类和一个名为 Tuna 的子类。我不明白为什么会这样:
Fish f;
Tuna t = new Tuna();
f=t; // I am confused about this statement
f.swim(); // (Tuna's swim method is invoked)
为什么允许 fish 变量“参与”(因为需要更好的短语)更专业的 Tuna 对象?我明显错误的“noob OOP Java 大脑”的工作方式是:
金枪鱼“是”鱼是可以的。鱼“是”金枪鱼是不行的。因此 f=t 不应该是可以的,而 t=f 应该是可以的。但从我上面的例子来看,情况正好相反!
非常感谢您对此的任何帮助。我提前为我的无知道歉,因为我才刚刚开始学习 Java。
编辑. 非常感谢以下所有回复。从他们那里,我现在了解到:
名为 f 的变量是 Fish 类型,因此,允许包含位于名为 t 的变量内的数据值(对象引用),因为 t 指的是 Tuna 对象,因此是 f 使用的兼容类型. 它是兼容的,因为金枪鱼是一种鱼。