幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

浅谈多态中的向上转型与向下转型

  向上转型概念明细
  【原理】:实际就是创建一个子类对象,将其当成父类对象来使用。
  语法格式:父类类型对象名new子类类型()AnimalanimalnewCat(元宝,2);animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换复制代码以下是定义的父类Animal类它的两个继承类Cat类和Dog类,分别重写了Animal类的eat()方法classAnimal{Stringname;intage;publicAnimal(Stringname,intage){this。namename;this。ageage;}publicvoideat(){System。out。println(age岁的name正在吃东西);}}classCatextendsAnimal{publicCat(Stringname,intage){super(name,age);}Overridepublicvoideat(){System。out。println(age岁的name正在吃猫粮);}}classDogextendsAnimal{publicDog(Stringname,intage){super(name,age);}Overridepublicvoideat(){System。out。println(age岁的name正在吃狗粮);}}复制代码
  使用场景1:直接赋值以下这种就是直接赋值类型的向上转型,将子类对象的引用给到父类对象。然后再将这个对象作为参数传递进去,就可以根据不同引用调用不同的行为publicclassTest1{publicstaticvoideat(Animalanimal){animal。eat();}publicstaticvoidmain(String〔〕args){Animalanimal1newAnimal(动物,3);Animalanimal2newCat(加菲猫,2);Animalanimal3newDog(哈士奇,1);eat(animal1);eat(animal2);eat(animal3);}}复制代码
  使用场景2:方法传参第二种方法传参很简单,我们连对象都不需要创建,只需要直接将三种不同对象的引用作为实参传递给到eat()中的形参接受,就可以产生【向上转型】publicclassTest1{publicstaticvoideat(Animalanimal){animal。eat();}publicstaticvoidmain(String〔〕args){eat(newAnimal(动物,3));eat(newCat(加菲猫,2));eat(newDog(哈士奇,1));}}复制代码使用场景3:方法返回第三种便是在一个方法中将不同对象的引用进行返回,然后传递给到父类对象,也可以产生向上转型publicstaticvoideat(Animalanimal){animal。eat();}复制代码稍微讲一下这个方法,可以看到形参是String字符类型,在方法中通过判断外界传入进来的字符串然后对应地进行返回若是猫就返Cat对象的引用;若是狗就返Dog对象的引用;若是其他就返nullpublicstaticAnimalBuyAnimal(Stringvar){if(var。equals(猫)){returnnewCat(加菲猫,2);}elseif(var。equals(狗)){returnnewDog(哈士奇,1);}else{returnnull;}}复制代码Animalanimal1BuyAnimal(猫);eat(animal1);Animalanimal2BuyAnimal(狗);eat(animal2);Animalanimal3BuyAnimal(兔);eat(animal3);复制代码然后可以看到,前两个传入的是【猫】和【狗】,因此执行的便是不同对象的行为,但是在最后传入了【兔】,因此在BuyAnimal()方法中会returnnull这就使得传入eat()方法中去调用相关对象的行为时因为不存在这个对象的引用,所以就会产生空指针异常
  上述便是向上转型的三种场景。学会辨别和使用即可向上转型的优缺点
  【优点】:让代码实现更简单灵活,这个从上面的三个不同场景就可以看得出来【缺点】:不能调用到子类特有的方法比如说我在Dog类中写了一个它自己独有的方法lookdoor()classDogextendsAnimal{publicDog(Stringname,intage){super(name,age);}Overridepublicvoideat(){System。out。println(age岁的name正在吃狗粮);}publicvoidlookdoor(){System。out。println(name在看门);}}复制代码但是可以看到,我在通过向上转型之后通过父类对象接受子类引用但是调用不到子类中特有的方法,这其实就是向上转型的缺陷
  【注意事项】上转型对象不可以访问子类新增的成员变量和子类自己新增的方法,因为这是子类独有的,而父类中没有上转型对象可以访问子类继承的方法或者是子类重写的方法,这个时候当上转型对象去调用这个方法时,一定是调用了子类重写后的方法,这就是我们前面在讲继承的时候所提到的方法重写不可以将父类创建的对象的引用赋值给子类声明的对象,也就是下面的这两句代码,这很明显和我们的上转型对象相反的,我们是将子类对象给到父类的引用,但这是将父类的引用给到子类的对象,完全就是颠倒黑白【就和猫是动物,动物却不是猫一个道理】向下转型
  接下去我们来讲讲向下转型,这种类型的转化不太安全,如果没有特殊需求,不建议使用向下转型解决【调用子类独有方法】继续上面的谈到的在向上转型之后无法调用子类独有的方法这个问题,其实向下转型就可以解决,代码如下Animalanimal1newDog(哈士奇,1);animal1。eat();animal1。lookdoor();Dogdog(Dog)animal1;dog。lookdoor();复制代码可以看到,也就是将父类的对象animal强转成为Dog狗类的对象,这样的话其实就可以去调用子类中特有的方法了
  向下转型的缺陷
  那为什么说向下转型不安全呢,因为它存在安全隐患Animalanimal1newCat(加菲猫,2);animal1。eat();animal1。lookdoor();Dogdog(Dog)animal1;dog。lookdoor();复制代码可以看到我将原先的Dog狗类变为了Cat猫类,此时animal就得到了猫类对象的引用,但是在下面可以看到如果将这个animal强转为Dog狗类的对象其实就会出问题了看到编译器报出了ClassCastException类型转换异常
  向下转型的优化
  向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。Java中为了提高向下转型的安全性,引入了instanceof,如果该表达式为true,则可以安全转换可以看到,在进行强转之前我通过instanceof这个关键字进行了一下判断,看看animal1是否获取到了Dog类的引用,若是才可以进行强制类型转化,若不是的话就不会进行任何操作Animalanimal1newCat(加菲猫,2);animal1。eat();animal1。lookdoor();if(animal1instanceofDog){判断一下animal1是否获取到了Dog类的引用Dogdog(Dog)animal1;dog。lookdoor();}复制代码
  如果对instance关键字感兴趣的可以看看官方的文档instanceof关键字
  再度对比二者【碎碎念】
  可能在上面这一系列说来有点难分辨,我们再来对比看看其实你可以这么去想Animalanimal1newCat可以看成是猫归属于一个动物类,那猫一定是属于动物的但是看到Dogdog(Dog)animal1其实就要去思考把动物归属于狗,这其实是说不通的,难道只要是动物就一定是狗吗?那可不一定,动物可多的是
  总结与提炼
  来总结一下本文所学到的内容在本文中我们讲到了多态中的【向上转型】与【向下转型】首先是说到了向上转型,介绍了它会出现的三种场景,也分析了它的优缺点,知道了在向下转型之后无法调用子类特有的方法但是在向下转型中,我们解决了这个问题,通过对父类对象进行一个强转,就可以调用到子类当中的方法,不过可以看到这种做法不太安全,若是一开始父类对象接受了一个子类的引用,但是在强转的时候转化为了另外一个子类,就会造成类型转换的问题于是后面对方法进行了修正,在前面加上了instanceof关键字进行一个判断,只有父类接收到了这个子类的引用,才可以强转为这个子类的对象
  原文链接:https:juejin。cnpost7205406121678225445

金鸡奖红毯生图baby倪妮比拼高定仙裙,关晓彤露腰衬衫造型迷第35届电影金鸡奖闭幕红毯在厦门开启。继飞天奖、金鹰奖两大电视圈盛会之后,2022年电影圈盛会也来啦,了解了一下嘉宾阵容,不愧是金鸡奖,堪称年底星光最为璀璨的红毯活动。……超模詹娜身穿爆款轻奢款大衣A4小蛮腰外露1。2米大长腿堪称一大家好我是书香,今天是2022年11月11日上午。众所周知肯豆詹娜是卡戴珊家族的超模金四妹,只要一说起卡戴珊家族,大家都会感慨卡戴珊家族美女们,最爱和NBA篮球巨星谈恋爱……12。20nba精选赛事分析1。骑士v爵士骑士主场有很强的防守能力,十场出了八场小。爵士最近进攻也不稳定,所以按概率再相信骑士靠防守赢得胜利,看双方小(小于221。5分)。2。老鹰v魔术明天老鹰穆雷……让恐龙灭绝的是小行星还是它自己?霸王龙在它的园子里徜徉,它那十余米的体型,配上尖锐的牙齿与厚实的皮肤,直叫周围的生物畏而远之,没有谁敢打它的主意。地球诞生以后,包括火山、地震在内的各种地质事件层出不穷,……关于那些开历史倒车的言论最近多了很多想开历史倒车的言论,我总结了一下他们的意思。就是希望把别人封起来,封一辈子都行,最好羊了直接拉去挖个坑埋了,只要自己的小圈子能自由出去浪而又不被感染就好。一但自己那……世界主要国家推动数字化转型举措近年来,新一代信息通信技术与制造业加速融合渗透,各主要国家和地区纷纷开展布局,运用工业互联网、人工智能等新兴技术推动制造业数字化转型已成普遍共识。虽然各国发布的战略和政策提法各……韩国人工智能服务帮助与已故亲人对话,获CES创新奖使用人工智能来帮助人们和过世者对话的概念并不新颖,有的公司开发了聊天机器人,有的尝试重现面部表情,有的模仿录音片段中的声音。DeepBrainAI则将所有这些功能集中到一个单一……肖战晒出泳池大片,线条明显胸肌吸睛,网友直呼过年了这段时间肖战虽然没有拍戏,不过也没有闲着,一直在默默努力地工作,也给我们带来了多场直播秀,不过在八月临近结束,暑期也即将过去,怎么能不交一下暑期作业呢?8月30日肖战更新……清华大学发布首个课程学习开源库CurML来源:机器之心本文约2000字,建议阅读5分钟清华大学朱文武团队发布全球首个课程学习开源库CurML,提供课程学习算法的支持平台。如何应用课程学习策略指导机器……经济下行压力之下,北京两大支柱产业仍保持明显增长欢迎在今日头条关注城市情报栈。北京的GDP在全国各大城市中排名第二,仅次于上海。2021年,北京GDP更进一步,突破了4万亿大关!如此庞大的经济体量,靠的是哪些行业……杨紫最新营业照,花色衬衫配短裙长靴,复古又潮流杨紫是大家非常喜欢的一位女演员,在作品中,她挑选的角色都很适合她,演绎起来情感也拿捏得很到位,自出道以来,为大家塑造了很多令人记忆深刻的角色。而在时尚感方面,杨紫也是不输任何一……女排世锦赛即时战报北京时间9月25日凌晨,2022年女排世锦赛继续进行,美国、多米尼加、巴西分别战胜各自对手迎得了开门红,详细赛果如下:一、小组赛C组,美国30哈萨克斯坦(2516,251……
鸿蒙上实现多人聊天功能本样例是基于即时通讯(简称IM)服务实现的OpenHarmony应用。该应用允许两人或多人使用互联网即时地传递文字、图片、文件、语音、emoji等讯息,可应用于各类聊天场……厦门人的新春一定要去南普陀,免门票免费送春联,2023越来越从今天起记录我的2023厦门人的新春,是一定要去南普陀的!现在来南普陀建议提前在网上预约,如果非节假日高峰时间,在现场预约也是可以的。南普陀寺始建于唐朝末年,因其供……红米K50电竞版参数再确认12G运存6400万主摄,价格良心作为国内主流手机厂商之一,小米手机凭借着在同价位机型中出色的性能与性价比吸引了不少消费者的青睐,无独有偶,在近日多方媒体的不断披露之下,又有一款小米系新机被基本确认,这款新机便……斩获多项第一!TCL电视深受消费者青睐千禧年之后,技术的高效迭代与风口的接连涌现让各大行业迎来巨变,各种各样的科技品牌强势崛起,而在家电领域,TCL旗下的彩电产品可谓是家喻户晓,深得消费者信任,而其中的原因也很简单……恭喜杜锋!恭喜广东球迷!5000万小前锋,有望强势加盟广东男恭喜杜锋!恭喜广东球迷!5000万传奇后卫,有望强势加盟广东男篮亲情提示:亲爱的读者,如何能每天能读到这样的体育资讯呢?点击右上角的关注按钮即可,您的关注将是……多种国家一级保护动物现身北京近日,在平谷区的金海湖畔,观鸟爱好者们观测到了被誉为空中老虎的国家一级保护动物白尾海雕,并且捕捉到了两大两小一家四口捕食的精彩画面。白尾海雕是大型猛禽,因尾羽呈楔形、为纯白色而……中国男足的水平为什么一直没有长进?北京时间2月1日大年初一晚上,在世预赛12强赛第八轮比赛中,中国队1比3惨败给越南队,彻底无缘2022卡塔尔世界杯,我看到这个消息,直接懵了中国足球水平为什么这么弱?专业……2分5板空篮未进!男篮大胜却难掩一人低迷,关键时刻遭杜锋弃用7963!中国男篮以一场16分优势大胜日本男篮,本场比赛在获胜之余,周琦的伤退也为球队内线造成了很大的压力,同时球队内线另外一名球员韩德君的发挥并不理想,在关键时刻并未得到杜锋……宝珀70年五十噚一秒抢完!为什么几十年前的复古表那么火?范主说:经典焕新相信不少爱表的范友和我一样,昨天的朋友圈应该都被宝珀刷屏了。今年恰逢宝珀五十噚诞生70周年,为了纪念这一重要时刻,宝珀特别推出了五十噚70周年限量款……C罗我们不能沉迷于科技儿子迷你罗12岁了我都没给他买手机1月29日消息,28日,曼联前锋C罗出席了迪拜世博会,并且领取了环足奖历史最佳射手,他还谈到了对于科技的一些看法,表示至今没有给12岁的儿子迷你罗买手机。谈到自己36岁依……中美科技差距到底有多大?我经常遇到这样的情况,一说到中国现在的发展趋势,未来将要超过美国,或者说到中国某些方面其实比美国强的时候,总是有人会说,你还是看看中美之间的科技差距再说吧。那么中美之间的……咸鱼翻身!5年前当霍华德替补!5年后联盟篮板王,生涯薪资1。人不可貌相!海水不可斗量,我们不喜欢以貌取人,不过当每个球星刚进入联盟时,我们都会八卦他有没有巨星相!咸鱼翻身!5年前当霍华德替补!5年后联盟篮板王,生涯薪资1。4亿……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网