黑马程序员技术交流社区

标题: 泛型中的一个问题 [打印本页]

作者: 李贺晓    时间: 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