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命令的情况下编写它.你知道该怎么写吗?
您需要添加一个上限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
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |