質問: new Cat();`のようにCatクラスをインスタンス化させると`say()`メソッドがキャストをしない限り呼べません。 もし、複数のクラスがAnimalを継承しつつ、各クラスでオリジナルメソッドを作った場合は毎回オリジナルメソッドを呼ぶたびにキャストしなければいけないのですか?
回答: クラスのどのメソッドが呼べるか、どのフィールドがアクセスできるか?というのは、それを収めた変数の型に依存しています。 変数の型に、どんなフィールド、どんなメソッドがあるかという情報が付いているのです。 `Animel`クラスには、`Say()`メソッドの情報は無いので、`Animal`型の変数である`Animal cat`では、呼ぶことができません。 > > もし、複数のクラスがAnimalを継承しつつ、各クラスでオリジナルメソッドを作った場合は毎回オリジナルメソッドを呼ぶたびにキャストしなければいけないのですか? > > > 各クラス独自の拡張部分に付いてはそうなります。 ポリモーフィズムとは、あくまで、親の持つ機能を子が内容を書き換えることにより実現しているので、 親の全く持たない要素に関しては、統一的には扱えません。 もしやるとしたら、予め親の方で元となるメソッドを用意しておく必要があります。