泛型类
定义:定义类时使用泛型。
格式:<> class 类名<字母列表>{ 修饰符 字母 属性; 修饰符 构造器(字母){ } 修饰符 返回类型 方法(字母) } //不能使用在静态属性、静态方法上 |
使用:指定具体类型 1.编译时会进行类别检查; 2.获取数据时不需要强制类型转换。 //泛型使用时不能基本类型 |
泛型常见字母
|
public class Student<T1,T2>{
private T1 javaScore;
private T2 oracleScore;
//泛型声明时不能使用静态属性|静态方法
//private static T1 test;
public T1 getJavaScore(){
return javaScore;
}
public void setJavaScore(T1 javaScore){
this.javaScore = javaScore;
}
public T2 getOracleScore() {
return oracleScore;
}
public void setOracleScore(T2 oracleScore) {
this.oracleScore = oracleScore;
}
public static void main(String[] args){
//使用时指定类型(引用类型)
Student<String,Integer> stu = new Student<String,Integer> ();
//1.安全:类型检查
stu.setJavaScore("优秀");
//2.省心:类型转换
int it = stu.getOracleScore(); //自动拆箱
}
}
泛型方法
定义使用:<字母>
修饰符<字母>返回类型 方法名(字母){ }
要定义泛型方法,只能将于泛型参数列表置返回值前。
注意:泛型还可以定义在方法中,是否拥有泛型方法,与其所在的类是否是泛型没有关系。
public class TestMethod {
public static void main(String[] args){
test("a"); //T----->String
}
//泛型方法
public static <T> void test(T a){
System.out.println(a);
}
}
泛型没有多态
1.回顾:类与接口存在多态
2.泛型没有多态
直接使用:A<Object> a = new A<String>();------------错误
方法形参与返回类型也不存在泛型多态
3.不能使用instanceof 判断是否为泛型实例 a instanceof A<String>
/**
* 父类为泛型类
* 1、属性
* 2、方法
*
* 要么同时擦除,要么子类大于等于父类的类型,
* 不能子类擦除,父类泛型
* 1、属性类型
* 父类中,随父类而定
* 子类中,随子类而定
* 2、方法重写:
* 随父类而定
*
*
* @author Administrator
*
* @param <T>
*/
public abstract class Father<T,T1> {
T name;
public abstract void test(T t);
}
/**
* 子类声明时指定具体类型
* 属性类型为具体类型
* 方法同理
*/
class Child1 extends Father<String,Integer>{
String t2;
@Override
public void test(String t) {
}
}
/**
* 子类为泛型类 ,类型在使用时确定
* @author Administrator
*
*/
class Child2<T1,T,T3> extends Father<T,T1>{
T1 t2;
@Override
public void test(T t) {
}
}
/**
* 子类为泛型类,父类不指定类型 ,泛型的擦除,使用Object替换
*/
class Child3<T1,T2> extends Father{
T1 name2;
@Override
public void test(Object t) {
// TODO Auto-generated method stub
}
}
/**
* 子类与父类同时擦除
*/
class Child4 extends Father{
String name;
@Override
public void test(Object t) {
}
}
/**
*错误:子类擦除,父类使用泛型
class Child5 extends Father<T,T1>{
String name;
@Override
public void test(T t) {
}
*/