在抽象类中实现返回类/对象名的方法

时间:2012-10-27 19:02:06

标签: java polymorphism

所以我有这个结构 - 一个名为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的类,并调用DoveHawkEagle等等。看起来像这样:

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()方法,以便返回类的名称和/或对象的名称。我不确定在我的例子中哪个类更好,这些类有鸟的名字,但想到它我觉得回到目标名称可能更有意义。

1 个答案:

答案 0 :(得分:4)

@Leron

这是一个例子:

class Untitled {
  private static abstract class Animal {
    public String getType() {
      return this.getClass().getSimpleName();
    }
  }

  private static class Bird extends Animal {

  }

  private static class Dog extends Animal {

  }

  public static void main(String[] args) {
    Animal bird = new Bird();
    System.out.println(bird.getType()); // prints Bird

    Animal dog = new Dog();
    System.out.println(dog.getType()); // prints Dog
  }
}

因此,您将获得正确的类型名称,并且您不需要在每个派生类型中实现构造函数。后期绑定将为您解决此问题。