Java之协变返回类型理解和简单实例

开心一笑

【早上起来,发现天气越来越冷了,白粽子记得要多包几层叶】

提出问题

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起来。

参考文章

【1】理解Java中的协变返回类型

【2】Thinking in Java(Java编程思想)

【3】关于java可变(协变)返回类型的解说之一------------基类与派生类

读书感悟

来自《徒然草》吉田兼好

  • 世上的事,最令人回味的,是始和终这两端。
  • 人心是不待风吹而自落的花。从前的恋人,还记得她情真意切的话,但人已离我而去,形同路人。此种生离之痛,犹甚于死别也。故见到染丝,有人会伤心;面对岔路,有人会悲泣。
  • 不管什么事,不要一副行家里手的样子。有教养的杰出人士,即使完全懂得的问题,难道就无节制地炫耀吗?在自己精通的专门领域,言辞一定要慎重,只要别人不提问就不要发言,这才是风度。
  • 那所有应该做而没有做的,逐日侵蚀沉淀之后,贮满泪水,就成为遗憾湖。那所有不该做而又做了的,层层堆积重叠之后,暗影耸然,就成为悔恨山。
  • 什么是真智慧呢?即是要明白可与不可都一样的道理。
  • 立志要成就一事的人,就不要因他事之无法兼顾而感到痛惜;也不要因他人之嘲笑自己有诸般不能而感到羞耻。一事之成,要以舍弃万事为代价。
  • 凡事一知半解,却夸夸其谈、品头论足,必令听者闻之生厌。

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,602评论 18 399
  • 前言 泛型(Generics)的型变是Java中比较难以理解和使用的部分,“神秘”的通配符,让我看了几遍《Java...
    珞泽珈群阅读 7,805评论 12 51
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,175评论 9 118
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,087评论 0 62
  • 今天一家人吃饭,无意中说到二姐,我说:二姐的性格,不了解她的人难以接受。尤其是她的说话方式,真的是心口如一,不会阿...
    温而泽润阅读 1,127评论 1 4