Javaの多態性について質問です
Java初心者です。どなたかお力をお貸しください。
-------------------
class Animal {
public void eat() {
// 汎用的なコード
}
}
class Dog extends Animal {
public void eat() {
// 特化したコード
}
public void bite() {
// Dog特有のコード
}
}
-------------------
上記のクラスについて質問があります。
Animal obj = new Dog();
obj.bite();
このコードがコンパイルエラーになるのは何故でしょうか?
コンパイラが参照型のみをチェックし、Animalクラスにbiteメソッドが
無いため、エラーを出すと参考書に書いてありました。
つまり、スーパークラス型の参照変数にサブクラスのインスタンスを格納し、
サブクラス特有のメソッドをコールできないとはどういう意図なんでしょうか?
コンパイラのチェックで引っかかるのは分かったのですが、
オブジェクト指向としては、この使い方は推奨されないということでしょうか?
(Animalの参照で、Dog特有のメソッドは使わない?)
実際にJavaでプログラムを組むときには、こんな使い方をしないのですか?
有知識者の方、教えて下さい。
私は、オブジェクト指向の多態性の理解が甘いため、こんな質問をしているのだと
思います。申し訳ございません。
お礼
ありがとうございます。これエラーになります。