我已经对该主题进行了进一步的研究,并且我意识到,例如,一个仅用于详细说明参数多态性的示例,它一定不能使用“实现”(详细说明子类型多态性),而应该使用泛型。
这是我以前的问题:
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 Toal:http://ideone.com/yiAqM