假设我有一个名为Fish的超类和一个名为Tuna的子类。我不明白为什么这个工程:困惑于遍历具有多态性的类层次结构
Fish f;
Tuna t = new Tuna();
f=t; // I am confused about this statement
f.swim(); // (Tuna's swim method is invoked)
为什么鱼变量允许“参与有”(美好短语想要的)更专业的金枪鱼对象?我明显错误的“noob OOP Java大脑”的工作方式是:
金枪鱼“是一个”鱼是好的。鱼“是”金枪鱼不行。因此f = t不应该是正确的,并且t = f应该是正确的。但从我上面的例子来看,情况正好相反!
非常感谢您的帮助。由于我刚刚开始学习Java,因此我提前为我的无知道歉。
编辑。以下所有答复非常感谢。从他们那里,我现在明白了:
称为f的变量是Fish类型,因此可以包含位于变量t中的数据值(对象引用),因为t指的是Tuna对象,因此是f使用的兼容类型。它是兼容的,因为金枪鱼是鱼。
字符串不能游泳吗?我的天啊!我开悟了! –
谢谢!我编辑了我的O.P.以反映我所学到的内容。 – user2911290