集合中的范型
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
简单的来说使用范型,表示集合只能用什么类型的集合;不使用范型的集合,可以装任何东西类型进去(并有黄色警告)
package com.cdz.fanxing;
import java.util.ArrayList;
public class FanXing {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>(); //只能为String类型的参数
//list.add(1);//参数不行
list.add("abc");
System.out.println(list);
ArrayList lis=new ArrayList(); //不使用范型,开口较大,所以可以存任何类型的
lis.add(1);//参数不行
lis.add("abc");
System.out.println(lis);
}
}
下面两个典型泛型创建了一个Fan类
典型泛型集合ArrayList<E>
package com.cdz.fanxing;
import java.util.ArrayList;
public class FanXing {
public static void main(String[] args) {
Fan f=new Fan();
ArrayList<Fan> list1=new ArrayList<Fan>();//只能添加Fan类型,也证明了集合的作用:存储对象
list1.add(f);
System.out.println(list1);
}
}
典型泛型集合HashMap<K,V>
package com.cdz.fanxing;
import java.util.HashMap;
public class FanXing {
public static void main(String[] args) {
HashMap<String,Fan> list2=new HashMap<String,Fan>();
list2.put("Name", f);
System.out.println(list2);
}
}
泛型接口
泛型接口就是拥有一个或多个类型参数的接口
package com.cdz.fanxing;
public interface FanJeiKou<T> {
//接口成员
//1.常量
//2.抽象方法,这里的抽象方法abstract,可以省略
public T prin(T a);
}
而范型接口中的类型交给实现类去实现
package com.cdz.fanxing;
public class FanJeiKouImp implements FanJeiKou<String> {
public String prin(String a){//重写了方法
return a;
}
}
泛型类
泛型类就是具有一个或者多个类型参数的类
例:
public class Student<T> {
public T print(T x){
//方法体
}
}
泛型类的继承
面向对象的特性同样适用于泛型类,所以泛型类也可以被继承
继承了泛型类的子类,必须也是泛型类
语法格式:
class 子类<T> extends 父类<T> { }