泛型类 继承

基于这两篇博文 总结而成
https://blog.csdn.net/ShierJun/article/details/51253870
https://blog.csdn.net/chendong_/article/details/51970564


1)由于初始化子类,要先初始化父类,所以要么指定父类的类型化参数的类型,要么继承父类的类型化参数(跟抽象类的继承很类似)
2)对于类型化参数的约束,子类应该小于等于其父类。


具体例子:

  1. class Son extends Father< T >{}

    是错误的,既没有继承父类的类型化参数,也未指定具体的类型化参数

  2. class Son< T > extends Father< T >{}

    是正确的,因为继承了父类的类型化参数

  3. class Son extends Father< Integer >
    正确
    1)在将父类的类型化参数指定后,就无法使用父类的类型化参数,但是可以使用 由类型化参数定义成员属性
    2) 如果子类和 父类的类型化参数同名(按这个例子就都是T),父类指定了类型,子类又增加了同名类型化参数,这时T只是子类的泛型参数,跟父类没有关系

  4. class Son< E,T > extends Father< T >{}
    额外增加了类型化参数 E

  5. class Son extends Father
    系统默认Father类型化实参为Object ,不过会有warning

  6. class Son extends Father{
    缩小泛型的范围,是准许的,但是不允许扩大泛型的范围

  7. class Father<T extends Temp> {}
    class Son<T extends Temp> extends Father<T>{}
    

    正确 子类继承了父类类型化参数以及参数的约束

    扫描二维码关注公众号,回复: 6514348 查看本文章
  8. class Son<E, E super T> extends Father {
    错误 若T为Object ,则E类型不存在

猜你喜欢

转载自blog.csdn.net/qq_19934363/article/details/91351757