だから私はこの構造を持っています - と呼ばれるインターフェースAnimal:
public interface Animal {
public String move ();
public String makeSound();
public String getType();
}
AbstractBird次に、次を実装する抽象クラスが呼び出されAnimaます。
public abstract class AbstractBird implements Animal {
public String birdType;
public String getType() {
return birdType;
}
@Override
public String move() {
return "Fly";
}
}
AbstractBird次に、同じ構造で拡張されDove、Hawk、などと呼ばれるいくつかのクラスが次のようにEagleなります。
public class Eagle extends AbstractBird {
public Eagle() {
birdType = "Eagle";
}
@Override
public String makeSound() {
return "Noone knows";
}
}
次に、メソッドAnimalSoundを持つ私のクラスです:main
public class AnimalSound {
public static void main(String[] args) {
Eagle e = new Eagle();
Dove d = new Dove();
Hawk h = new Hawk();
play(e);
play(d);
play(h);
}
public static void play(Animal a) {
System.out.println("````````````");
System.out.println(a.getType());
System.out.println(a.makeSound());
System.out.println(a.move());
}
}
ご覧getType()のとおり、を返すこのメソッドがありますbirdtype。メソッド自体は問題のない抽象クラスに実装されていますが、正しいものを取得するには、birType初期化できるクラスごとにコンストラクターを作成する必要がありbirdType、これはあまり好きではない部分です。したがって、私の質問は、getType()メソッドを抽象クラスに実装して、クラスの名前やオブジェクトの名前を返す方法です。クラスが鳥の名前を持っている私の例ではどちらが良いかわかりませんが、それを考えると、オブジェクトの名前に戻る方が理にかなっていると思います。