java遗珠之协变返回类型

Posted 吴冬冬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java遗珠之协变返回类型相关的知识,希望对你有一定的参考价值。

子类重写父类的方法时返回类型和父类方法的返回类型可以不同,但是子类的返回类型必须是父类方法返回类型的子类。

父类

public class Bicycle 
    private int cadence;
    private int gear;
    private int speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) 
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    

    public Bicycle newBike() 
        return new Bicycle(1, 1, 1);
    

子类

public class MountainBike extends Bicycle 
    public int seatHeight;

    public MountainBike(int startHeight, int startCadence,
                        int startSpeed, int startGear) 
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    
    @Override
    public MountainBike newBike() 
        return new MountainBike(1, 1, 1, 1);
    

如果返回类型不是父类返回类型的子类就会报错: attempting to use incompatible return type

    @Override
    public Object newBike() 
        return new Object();
    

以上是关于java遗珠之协变返回类型的主要内容,如果未能解决你的问题,请参考以下文章

java遗珠之泛型类型推断

java遗珠之泛型七大限制

java遗珠之泛型七大限制

java遗珠之泛型不可靠类型

java遗珠之泛型不可靠类型

java遗珠之泛型类型擦除