A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李贺晓 中级黑马   /  2012-10-30 11:18  /  1229 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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类型啊

1 个回复

倒序浏览
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这种类型来提高扩展。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马