Java范型

类型检查由编译器自动完成
范型类:
范型只能是应用类型,不能是基本类型
范型只能为非静态的属性和方法
范型接口:
范型不能为全局的静态方法
范型方法:
只能访问对象信息,不能修改对象信息
范型类的继承:
1 子类声明时指定具体类型:
属性类型为具体类型,方法同理
class Father<T>{
T name;
public void test(T age);
}
class Child1 extends Father<String>{
String name;
@override
public void test(String name);
}
2 子类为范型类,使用时确定(子类中的范型的个数应该与父类中的范型类型个数相同,顺序可以调换)
class Child2<T> extends Father<T>{
T name;
@override
public void test(Tage){


}
}
3 子类为范型类,父类不指定类型,称为范型的擦除,统一使用object类来替换
class Child3<T> extends Father{


}
4 子类和父类同时擦除,都适用object替换
class Child4 extends Father{


}
范型擦除:
要么父类擦除,要么同时擦除
属性类型:父类中,随父类而定
子类中,随子类而定
方法重写:随父类而定


范型接口的继承与范型类的继承同理,共四种情况


范型擦除:
1 继承|实现声明不指定类型
2 使用时不指定类型
统一Object对待
1 编译器警告,消除使用object、
2 不完全等同于object,编译时不会类型检查




多态的三种形式:
1 普通的多态 父类引用指向子类声明
2 形参多态
3 返回值多态


通配符:? extends super
? extends T (在实际使用中,实际的类型只能为T自身或T的子类)
?super T (在实际的使用中,实际的类型只能为T自身或T的父类)
1 可以用在声明类型及声明方法参数上,不能用在声明类上和使用上
2 ?可以接受范型的任意类型,只能接受和输出,不能修改
Student<?> student=new Student<String>() 正确
Student<?> student=new Stduent<?>() 错误


范型没有多态
但可以使用通配符的形式,如下:
class Fruit{

}
class Apple extends Fruit{

}
class Student<T>{

}
void test(Student<? extends Fruit>){

}
public static void main(String[] args){
test(new Student<Apple>());
}


范型嵌套:
1 声明:嵌套使用范型
A<B<C>> a=new A<B<C>>();
2 使用:从内到外,一层一层拆分
与调用没有任何关系,只是确定了类型而已
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值