0
回答
Java之协变返回类型理解和简单实例
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   
提出问题
Java中协变返回类型如何理解???
解决问题


概念


导出类(子类)覆盖(即重写)基类(父类)方法时,返回的类型可以是基类方法返回类型的子类。


实例:


package com.evada.de;
/**
 * @Author 阿毅
 * Created by Ay on 2016/12/4.
 */
public class Ay {


    public static void main(String[] args) {
        Person person = new Boy();
        Flower flower = person.buy();
        flower.like();
        //! flower.love();  编译错误
        //因为是协变返回类型,所以可以向下转型
        RoseFlower roseFlower  = (RoseFlower) person.buy();
        //可以调用like方法
        roseFlower.like();
        //可以调用love方法
        roseFlower.love();
    }
}
class Person{
    public Flower buy(){
        System.out.println("Flower...");
        return new Flower();
    }
}
/**
 * 男孩
 */
class Boy extends Person{


    /**
     * 这里覆盖Person类的buy
     * @return
     */
    @Override
    public RoseFlower buy(){
        System.out.println("RoseFlower...");
        //注意这里,这里就是协变返回类型
        //导出类**(子类)覆盖(即重写)**基类**(父类)方法时,
        // 返回的类型可以是基类方法返回类型的子类
        return new RoseFlower();
    }
}
class Flower{
    /**
     * 让普通人喜欢
     */
    public void like(){
        System.out.println("like");
    }
}
class RoseFlower extends Flower{
    /**
     * 让女孩喜欢
     */
    public void love(){
        System.out.println("love....");
    }
}
打印结果:


RoseFlower...
like
RoseFlower...
like
love....
协变返回类型运行返回更加具体的类,比如上面的RoseFlower类,而不是Flower类,在java中,儿子比父亲强,返回子类适用范围更为广泛,因为除了可以调用父类的方法,还可以调用自己的方法,get起来。??


其他:


如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见新手想要交流学习的也可以加我企鹅724089132一起交流学习、多谢支持!
举报
可可JL
发帖于1年前 0回/271阅
顶部