多形性についてしか学習していないので、私は簡単に(本から文字通りコピーします)。メソッドに引数としてクラスを渡そうとします。私がそれをすると、スーパークラスのメソッドを呼び出すことはできますが、実際のサブクラスは呼び出すことはできません。 start()メソッドを使用して、私はオオカミの遠吠えを作ってみる:多型引数はスーパークラスでは動作しますが、サブクラスでは動作しません
public class experiment {
public static void main(String[] args) {
PetOwner own = new PetOwner();
own.start();
}
}
//Trying polymorphic arguments
class Vet {
public void giveShot(Animal a) {
a.howl();
}
}
class PetOwner {
public void start() {
Vet v = new Vet();
Wolf w = new Wolf();
v.giveShot(w);
}
}
//Inheritance//
//Kingdom - Animal
class Animal {
public void move() {
System.out.println("*motions softly*");
}
}
//Family - canine
class Canine extends Animal {
public void bark() {
System.out.println("Woof!");
}
}
//Species - wolf
class Wolf extends Canine {
public void howl() {
System.out.println("Howl! Howl!");
}
}
私はスーパークラス(動物)にハウルメソッドを渡すと、それが正常に動作します。私がWolfクラスから直接呼び出すと、うまく動作します。私が狼クラスを引数として渡してそこから呼び出そうとすると、うまくいきません。私はそのようにそれを試して、なぜここ
は、ヘッドファーストのJava PGから187を引用し、次のとおりです。
獣医さんgiveShot()メソッドは、あなたがそれを与える任意の動物を取ることができます。引数としてオブジェクトあなたのように 限りは、それは 私が取得しています
に動作しますサブクラス動物のある「シンボルシンボルを見つけることができません:メソッドハウル()、タイプの動物の場所の変数を」エラー。
右* 'おそらく、あなたはありませんでした継承されたメソッドを参照しようとしています – GhostCat
@GhostCat私は、特にそれが主張している本から引用符を追加しました。 - VetのgiveShot()メソッドはあなたがそれを与えるAnimalを取ることができます。引数として渡されたオブジェクトがAnimalの*サブクラス*である限り、それは動作します –