当前位置:编程学习 > JAVA >>

J2SE泛型继承的一个小问题

各位,
 
请看如下代码,

public class Test01 {
  public static void test(Child<Object, Object> c2){
  
  }
  
  public static void test1(Child<?, ?> a){
  
  }
  
  public static void main(String[] args) {
      Child c1= new Child();  //相当于Object,但不是Object; 擦出不会进行类型检查
      Child<Integer, Integer> c2 = new Child<Integer, Integer>();
      
      test(c1);
      test1(c1);
      test(c2);
      test1(c2);
 }
  

}

public abstract class Father <T,T1> {
T name;
public abstract <T1> void test(T1 t);

}


 class Child<T1,T> extends Father<T,T1> {
 T name;
 public <T1> void test(T1 t){
 System.out.println();
 }
}
 

其中 test(c2)编译时报错,笔者愚昧的以为这里是 父类引用指向子类对象,是不是泛型里有特殊的情况?
--------------------编程问答--------------------         Object o = new Integer(0);//存在父子关系,编译通过
        HashMap<Object,Object> map = new HashMap<Integer,Integer>();//不存在继承关系,编译失败 --------------------编程问答-------------------- 楼上+1

泛型是非协变的。 --------------------编程问答-------------------- 对,泛型是不能继承的...所以没有所谓的多态的概念...也不能随便使用父类引用指向子类对象...
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,