关于泛型不明白的地方

lg_asus 2012-03-25 05:57:59

abstract class A<T>{
public T obj;

public A(T obj){
this.obj = obj;
}

protected abstract T getObj();

protected abstract void setObj(T obj);
}

class B extends A{

public B(ArrayList<String> list){
super(list);
}

@Override
protected ArrayList<String> getObj() {
return null;
}

@Override
protected void setObj(ArrayList<String> obj) {
}
}


上面的getObj()返回值类型可以为ArrayList<String> 这是协变返回类型,没问题。
但setObj(ArrayList<String> obj) 就不行了,无法重写父类的setObj(T obj)。
还有如果我在子类中访问父类的obj变量,是Object类型,并不是子类中构造参数的类型。
我知道直接访问变量不是个好习惯,可是泛型在这里的作用还有么,和直接用Object做为类型没有任何差别啊。
...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lg_asus 2012-03-25
  • 打赏
  • 举报
回复
灰常感谢!!!
宏Lee 2012-03-25
  • 打赏
  • 举报
回复
abstract class A<T>{
public T obj;

public A(T obj){
this.obj = obj;
}

protected abstract T getObj();

protected abstract void setObj(T obj);
}

class B extends A<ArrayList<String>{

public B(ArrayList<String> list){
super(list);
}

@Override
protected ArrayList<String> getObj() {
return null;
}

@Override
protected void setObj(ArrayList<String> obj) {
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧