范型的继承

范型的继承

子类继承父类结果:

  • 保持子类的范型化
  • 子类不再范型化

一般的范型继承

范型父类:

public class FatherFoo <T, E> {

    private T t;

    private E e;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public E getE() {
        return e;
    }

    public void setE(E e) {
        this.e = e;
    }
}
子类继续范型化

// 子类中的 T,E 继承了父类中的T, E的范型类型
// 而 范型类型 F是子类自己添加的
public class SubFoo<F, T , E> extends FatherFoo<T, E> {

    private F f;

    public void setF(F f) {
        this.f = f;
    }

    @Override
    public void setT(T t) {
        super.setT(t);
    }

    @Override
    public void setE(E e) {
        super.setE(e);
    }


}
子类不再范型化

1.指定具体的范型类型,重写之后的方法中的类型随着父类指定的类型:

public class SecFoo extends FatherFoo <String, Integer> {

    @Override
    public void setT(String s) {
        super.setT(s);
    }

    @Override
    public void setE(Integer integer) {
        super.setE(integer);
    }
}

2.没有指定具体的范型类型,默认是Object类型(因为类型被擦除):


public class SecFoo extends FatherFoo {

    @Override
    public void setT(Object o) {
        super.setT(o);
    }

    @Override
    public void setE(Object o) {
        super.setE(o);
    }
}

有界的范型的继承

范型父类:

public class FatherTan<T extends Road> {

    private T t;

    public void setT(T t) {
        this.t = t;
    }
}
子类继续范型化

// T 继承了父类中的 T 类型,所以要在子类中约束
public  class SubTan<E extends Tree, T extends Road> extends FatherTan<T>{

    @Override
    public void setT(T t) {
        super.setT(t);
    }
}

// 不能写成以下方式,编译会报错!!!
public  class SubTan<E extends Tree, T> extends FatherTan<T extends Road>{

}

子类不再范型化

1.指定具体的范型类型,重写之后的方法中的类型随着父类指定的类型,指定的类型必须是Road类的子类型:

public class SecTan extends FatherTan<SecondRoad> {

    @Override
    public void setT(SecondRoad secondRoad) {
        super.setT(secondRoad);
    }
}

2.没有指定具体的范型类型,这里默认是Road类型:

public class SecTan extends FatherTan {

    @Override
    public void setT(Road road) {
        super.setT(road);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值