泛型产生的背景
案列:
由于学生成绩存在多种类型,直接定义Object属性存放。
存入整数成绩
在获取值时强转成int 和 String类。此时不会报错
但是运行时抛出异常
原因是强制转换成String类型转换时出现异常,还需要加上手工类型检查
在使用Object发生多态行为的时候,不仅需要强制类型转换,还需要手动类型检查 为了避免这样 的问题 所以这里就引入了泛型
上面的案列使用类型
定义泛型类Student
使用时指定类型,这里的类型只能使用引用类型,不能使用基本类型。
类型自动检查 setJavaScore 里面的值只能存字符串类型
类型自动转换
泛型类不能使用在静态属性、静态方法上 因为泛型是在使用时确认,但是静态方法属性是在编译时确定
泛型方法,只能 访问对象信息,不能修改信息
子类泛型类的几种情况
1、子类声明时指定具体类型
2、子类为泛型类,类型在使用时确认
3、子类为泛型类,父类不指定类型,泛型的擦除,使用Object替换
4、子类父类同时擦除
子类父类要么同时擦除,要么子类大于等于父类的类型。不可以子类擦除,父类泛型
属性的类型随位置而定,在子类中随子类定,在父类中随父类定。如果在重写的方法中,统一随父类而定。
泛型接口与继承同理
注:擦除不会类型检查