我进一步研究了这个主题,并且我意识到,对于纯粹详细参数化多态性的一个例子,它不能使用“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命令的情况下编写它。你知道该怎么写吗?
答案 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();
}