Java中的参数多态与简单的例子

时间:2012-04-17 03:01:00

标签: java generics polymorphism

我进一步研究了这个主题,并且我意识到,对于纯粹详细参数化多态性的一个例子,它不能使用“implements”(这将详细说明子类型多态性),而应该使用泛型。

这是我之前的问题: What is parametric polymorphism in Java (with example)?

这是将泛型用于单个问题的重写代码。

class Pet<T>
{
  private T pet;

  public Pet(T pet)
  {
    this.pet = pet;
  }

  public String talks()
  {
    // what do i write here?
    // pet.talks(); is undefined for type T
  }
}

class Cat
{
  public String talks()
  {
    return "Meow";
  }
}

class Dog
{
  public String talks()
  {
    return "Woof";
  }
}

public class TestPet
{

  public static void main(String[] args)
  {
    Pet<Cat> cat = new Pet<Cat>(new Cat());
    System.out.println("Cat says " + cat.talks());

    Pet<Dog> dog = new Pet<Dog>(new Dog());
    System.out.println("Dog says " + dog.talks());
  }

}

我的代码在评论中有详细说明。我不确定如何在不使用implements命令的情况下编写它。你知道该怎么写吗?

1 个答案:

答案 0 :(得分:8)

您需要为T添加一个上限,以便它实现一个接口,该接口保证talks()类型中有T方法。

class Pet<T extends Talker>
{
    private T pet;

    public Pet(T pet)
    {
        this.pet = pet;
    }

    public String talks()
    {
        return pet.talks(); // is now defined for type T
    }
}

interface Talker
{
    String talks();
}

演示,thanks to Ray Toalhttp://ideone.com/yiAqM