基本的に私はここで少し問題を抱えています。
スーパークラスとサブクラスがあります。スーパークラスのメソッドをオーバーライドするサブクラスのメソッドを実行する割り当てを行うことになっています。これは正常に機能します。私が抱えている問題は「動的バインディング」です。サブクラスと同じクラスの参照変数型を宣言すると、正常に機能します。ただし、型がスーパークラスであると宣言すると、サブクラスのメソッドが存在することすら認識されません。
これが例です。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