泛型


*泛型的介绍:(泛型就是接受数据类型的类型)

  1,泛型又称参数化类型,解决数据类型的安全问题。

  2,在类声明或实例化时只要指定好需要的具体的类型即可。

  3,泛型的作用:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值类型,或者是参数类型。 

class Person<E>{
E s;
public Person(E s){
this.s=s;
}
public E getS(){
return s;
}
}

E具体的数据类型在定义类对象的时候指定,即在编译期间就确定E是什么类型 。

*泛型的细节:

  1,给泛型指定数据类型时,要求是引用类型,不能是基本数据类型

  2,在给泛型指定具体类型后,可以传入该类型或者该类型的子类类型

  3,默认泛型类型是object

*自定义泛型:

  *自定义泛型类:

    *基本语法:

      class 类名{  成员  }

    *细节:

      1,普通成员可以使用泛型(属性,方法)

      2,使用泛型的数组,不能进行初始化

      3,静态方法中不能使用类的泛型

      4,泛型类的类型,是在创建对象时确定的(因为在创建类的对象时,需要指定确定类型)

      5,如果在创建对象时,没有指定类型,默认为Object

  *自定义泛型接口:

    *基本语法:

      interface 接口名{}

    *细节

      1,接口中,静态成员也不能使用泛型,

      2,泛型接口的类型,在继承接口或实现接口时确定

      3,没有指定类型,默认为Object

  *自定义泛型方法:

    *基本语法:

      修饰符 返回类型 方法名(参数列表){}

    *细节:

      1,泛型方法,可以定在普通类中,也可以定义在泛型类中

      2,当泛型方法被调用时,类型会确定

      3,public void eat(E e){},修饰符后没有eat方法不是泛型方法,只是使用了泛型

*泛型的继承和通配符:

  1,泛型不具有继承性:List list=new ArrayList();

  2,<?>:支持任意泛型类型

  3,<? extends A>:支持A类以及A类的子类,规定了泛型的上限

  4,<? super A>:支持A类以及A类的父类,规定了泛型的下限