我已经对该主题进行了进一步的研究,并且我意识到,例如,一个仅用于详细说明参数多态性的示例,它一定不能使用“实现”(详细说明子类型多态性),而应该使用泛型。

这是我以前的问题:
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命令的情况下编写它。你知道写什么吗?

最佳答案

您需要为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

10-06 08:46