基本上我在这里有一个小问题。对象引用类型(动态绑定)的问题?
我有一个超类和一个子类。我应该执行一个任务,从子类中执行一个方法,该方法将覆盖超类中的方法。这工作正常。我遇到的问题是“动态绑定”。当我将引用变量类型声明为与子类相同的类时,它工作正常。但是,当我将类型声明为超类时,它不会识别任何子类的方法甚至存在。
下面是一个例子。我有一个名为船舶类和船舶的另一个子类,称为BabyShip
如果我宣布为ShippyShip的参考:
BabyShip subref = new BabyShip();
它工作正常。然而,当我把它声明为:
Ship subref = new BabyShip();
编译器甚至不承认任何从BabyShip的方法,如果我宣布子参考的类型为船舶......但我的书中明确表示,它应该。它为什么这样做?
当我编译它时,它会给出一个正常的找不到符号错误。
ShipTester.java:8: error: cannot find symbol
ship.setMaxPassengers(1);
^
symbol: method setMaxPassengers(int)
location: variable ship of type Ship
1 error
对不起。你是对的,我没有清楚地看到它只能执行类型为类的方法。我想我需要使用另一种解决方法。 – Johnny
@Johnny:如果你的代码只能用于特定的子类,那么它也应该是你的变量的类型。 –