泛型中extends和super的区别

泛型的定义
泛型的定义:泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。

泛型的一些基本术语

以ArrayList和ArrayList做简要介绍:

整个ArrayList称为泛型类型

ArrayList中的 E称为类型变量或者类型参数

整个ArrayList 称为参数化的类型

ArrayList中的integer称为类型参数的实例或者实际类型参数

·ArrayList中的念为typeof Integer

ArrayList称为原始类型

泛型通配符extends与super的区别

  • 限定参数类型的上界:参数类型必须是T或T的子类型
  • 限定参数类型的下界:参数类型必须是T或T的超类型

总结为:

  • 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入
  • 只能用于限定方法入参,告诉编译器入参只能是T或其子类型,而返参只能用Object类接收
  • 代表的是上界通配符,也就是说这个List中存放的对象都是Fruit以及其子类的对象,这样我们就不用因为输入的List中类型的不同而改变代码了。 上界通配符有一个特点,就是程序只知道List中的对象是Fruit的子类的对象,但是如果Fruit的子类有很多个,那个在使用add方法的时候,就可能出现本来是List,然后在其中添加了banana对象,从而失败。
  • super与extends是完全相反的,其定义的是下界通配符。 List Fruit>也就是说List中存放的都是Fruit和它的父类的对象,比如food,Object。而且如果要在这个List中取出数据,那就不能够确定具体是Fruit的哪个父类的对象,可能是Food,可能是Object。为了保证一定能够取出来,就必须把其转型成Object对象,但是这个时候就会失去原有对象的类型信息。所以List super Fruit>不能够提取数据。

你可能感兴趣的:(JAVA面试题合集)