泛型的使用二

泛型虽好但是不能够使用多态,在使用过程中指定是什么类型就是什么类型,编译器不认可多态的使用,也就是说泛型不能够使用父类对象引用子类对象。类型系统的研究人员知道这点已一个经很久了,java的设计者发明了一种巧妙的“解决方案”,那就是使用通配符。

public static void main(String[] args){

        A<Anmimal>  animal=new  A<Cat>();//这么写是错误的编译器会检查出来异常。提示错误信息。

}

通配符:<? extends father>、<? super child>可以使用声明类型及生命方法不能使用在类上。?可以接受泛型的任意类型,只能接受和输出,不能进行修改。

public void run ()

{

          China<?> p1=new China<Manager>();

          run(China <Manager>);//这样就能达到类似多态的目的

          run(p1);//这是错误的因为编译的时候看左边,虽然能给p1赋值,但是在编译过程中不能够使用未知的类型。

}

public static  void run (China<? extends employee>)

{

}

注意声明时可以使用通配符但是使用时确定,不能够使用通配符。

<? extends father>表示?具有上限<? super child>表示具有下限。

嵌套使用泛型

只是声明类型的过程中使用,使用时一层层从外到内拆分。

Preson<China<Student>> p=new Person<China<Student>>();

China<Student> ct=p.ct;

Student stu=ct.student;

泛型与数组

没有泛型数组不能创建泛型数组

可以只有声明,可以使用?声明泛型数组其实没有任何的意义。

China<Student> [] ct=null;

Student<String> stu=new Studnet<String>[10];

出现错误,声明的时候可以使用但是不能使用。

China <?>[] ct2=new China<?>[10];

出现错误,不能使用泛型创建数组。

Student<?>[] stu3=new Student[10];

所以发现ArryList在使用泛型的过程中是一种巧妙的转换,而非真正是使用了泛型数组。其内部接收是用Object数组接收。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值