2

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

这是我之前的问题: 什么是 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());
  }

}

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

4

1 回答 1

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

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

于 2012-04-17T03:05:12.257 回答