美文网首页
泛型 - 类层次

泛型 - 类层次

作者: 平头哥2015 | 来源:发表于2018-11-29 19:10 被阅读0次

跟非泛型类一样,泛型类也可以作为父类或子类,从而成为类层次的一部分。其中的关键区别是:在泛型类层次中,所有子类都必须向上传递父类所需要的所有类型参数。

泛型父类

例子

public class Generic<T> {

    private T obj;

    public Generic(T obj) {
        this.obj = obj;
    }

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

}

public class SubGeneric<T> extends Generic<T> {

    public SubGeneric(T obj) {
        super(obj);
    }

}

注意

  • 除了将T传递给父类外,SubGeneric没有再使用类型参数T。因此即使子类不需要泛型化,也仍然必须指定泛型父类所需要的类型参数。
  • 除了传递给父类的类型参数外,子类还可以添加自己的类型参数。
public class SubGeneric<T, V> extends Generic<T> {

    private V obj2;
    
    // ...
    
}

泛型子类

非泛型类可以作为泛型子类的父类。

public class Generic<T> extends NonGeneric {

    private T obj;
    
    // ...
    
}

运行时类型比较

instanceof运算符用于在运行时判定对象是否是某个类的实例。如果对象是指定类型的实例或者可以转换成指定的类型,就返回true。

Generic<Integer> iInstanceOne = new Generic<Integer>(10);
SubGeneric<Integer> iInstanceTwo = new SubGeneric<Integer>(20);
SubGeneric<String> sInstance = new SubGeneric<String>("test");

iInstanceOne instanceof Generic<?> // true
iInstanceOne instanceof SubGeneric<?> // false

iInstanceTwo instanceof Generic<?> // true
iInstanceTwo instanceof SubGeneric<?> // true

sInstance instanceof Generic<?> // true
sInstance instanceof SubGeneric<?> // true

注意:因为在编译的时候泛型类型信息就会被擦除,所以在运行时不能使用泛型类型信息。下面的代码无法通过编译:

iInstanceTwo instanceof SubGeneric<Integer>

强制类型转换

一个泛型类实例只能转换成另一个类型兼容且类型参数相同的泛型类实例。

(Generic<Integer>) iInstanceTwo // OK
(Generic<Long>) iInstanceTwo // error

重写泛型类的方法

可以像重写其他任何方法那样重写泛型类的方法。

public class SubGeneric<T> extends Generic<T> {

    public SubGeneric(T obj) {
        super(obj);
    }

    @Override
    public T getObj() {
        System.out.println("SubGeneric getObj()");

        return super.getObj();
    }

}

相关文章

  • 泛型 - 类层次

    跟非泛型类一样,泛型类也可以作为父类或子类,从而成为类层次的一部分。其中的关键区别是:在泛型类层次中,所有子类都必...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • 泛型

    关于泛型类,泛型方法,泛型接口泛型类:public class FanXingLeiDemo {//这里是泛...

  • 泛型

    1.什么是泛型? 2.为什么需要泛型? 3.泛型类、接口 泛型类注意事项: 从泛型类派生子类 泛型接口 泛型接口的...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • typescript入门-泛型

    基础定义 泛型接口 泛型类 泛型约束 使用类类型

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • 想理解泛型吗?看这一篇就够了!

    一、前言二、泛型类2.1 概述Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法 本节演示泛型类。 2...

网友评论

      本文标题:泛型 - 类层次

      本文链接:https://www.haomeiwen.com/subject/latqcqtx.html