黑马程序员技术交流社区
标题:
泛型中的一个问题
[打印本页]
作者:
李贺晓
时间:
2012-10-30 11:18
标题:
泛型中的一个问题
class Apple<T>
{
private Tinfo;
public Apple(){};
public Apple(T info)
{
this.info=info;
}
public void setInfo(T info)
{
this.info=info;
}
public T getInfo()
{
return info;
}
}
class A1 extends Apple<String>
{
public String getInfo()//正确重写了getInfo方法
{
return super.getInfo();
}
public Object getInfo()//错误的重写getInfo方法,返回值类型不正确
{
return super.getInfo();
}
}
class A2 extends Apple
{
public String getInfo()
{
super.getInfo();//这里为什么返回的Object类型
return super.getInfo().toString();
}
}
A2类中的super.getInfo()访问的返回值类型怎么会是Object类型,这个方法重写时,返回值类型明明是String类型啊
作者:
张忠豹
时间:
2012-10-30 12:26
A1中
public Object getInfo()//错误的重写getInfo方法,返回值类型不正确
{
return super.getInfo();
}
原因是class A1 extends Apple<String>已经声明了T的类型是String类型,所以Object是错误的。
A2类中的super.getInfo()访问的返回值类型怎么会是Object类型,这个方法重写时,返回值类型明明是String类型啊
在A2中好像你没有说明Apple存储的元素是什么类型的吧class A2 extends Apple。
如果在泛型的类型参数没有实例化的时候,默认值是Object。
泛型是jdk1.5时出现的,不仅提高了程序的编译安全,还提高了程序的扩展性。
但是在jdk1.5之前,为了提高程序的扩展性都用的是Object这种类型来提高扩展。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2