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

Dan*_*her 2 java generics polymorphism

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

这是我之前的问题: Java中的参数多态(什么是示例)?

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

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());
  }

}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*all 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();
}
Run Code Online (Sandbox Code Playgroud)

演示,感谢Ray Toal:http://ideone.com/yiAqM