基本上我在这里有一个小问题。
我有一个超类和一个子类。我应该做一个分配,我从子类中执行一个方法,它覆盖了超类中的方法。这工作正常。我遇到的问题是“动态绑定”。当我将引用变量类型声明为与子类相同的类时,它可以正常工作。但是,当我将类型声明为超类时,它甚至不承认任何子类的方法存在。
这是一个例子。我有一个名为 Ship 的类和另一个名为 BabyShip 的 Ship 子类
如果我将 ShippyShip 的引用声明为:
BabyShip subref = new BabyShip();
它工作正常。但是,当我将其声明为:
Ship subref = new BabyShip();
如果我将 subref 的类型声明为 Ship ,编译器甚至不会识别 BabyShip 中的任何方法......但我的书清楚地表明它应该这样做。为什么要这样做?
当我编译它时,它给出了一个常规的找不到符号错误。
ShipTester.java:8: error: cannot find symbol
ship.setMaxPassengers(1);
^
symbol: method setMaxPassengers(int)
location: variable ship of type Ship
1 error