城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

在java的继承中你是不是也有过这样的疑惑?

5月13日 枯心人投稿
  最近在写代码,有两个属性很相近的类,其中80的属性(字段)都是一样的,剩下的才是各自不一样的,在设计的时候,采用了继承的方式,抽象除了一个父类,大概如下,
  有FirstChild和SecondChild两个类,因为其中的属性name、code等是相同的,为此抽出了一个父类BaseDO,如下packagecom。example。day01;publicclassBaseDO{privateSprivateSprivateStringfield1;privateStringfield2;publicStringgetName(){}publicvoidsetName(Stringname){this。}publicStringgetCode(){}publicvoidsetCode(Stringcode){this。}publicStringgetField1(){returnfield1;}publicvoidsetField1(Stringfield1){this。field1field1;}publicStringgetField2(){returnfield2;}publicvoidsetField2(Stringfield2){this。field2field2;}OverridepublicStringtoString(){returnBaseDO{namename,codecode,field1field1,field2field2};}}
  FirstChildpackagecom。example。day01;publicclassFirstChildextendsBaseDO{privateStringmyField1;privateStringmyFiled2;publicStringgetMyField1(){returnmyField1;}publicvoidsetMyField1(StringmyField1){this。myField1myField1;}publicStringgetMyFiled2(){returnmyFiled2;}publicvoidsetMyFiled2(StringmyFiled2){this。myFiled2myFiled2;}OverridepublicStringtoString(){returnFirstChild{myField1myField1,myFiled2myFiled2}super。toString();}}
  SecondChildpackagecom。example。day01;publicclassSecondChildextendsBaseDO{privateStringsecondField1;privateStringsecondField2;publicStringgetSecondField1(){returnsecondField1;}publicvoidsetSecondField1(StringsecondField1){this。secondField1secondField1;}publicStringgetSecondField2(){returnsecondField2;}publicvoidsetSecondField2(StringsecondField2){this。secondField2secondField2;}OverridepublicStringtoString(){returnSecondChild{secondField1secondField1,secondField2secondField2}super。toString();}}
  从上面可以看到两个子类除了含有父类的属性外还有自己各自的属性,现在有个需求是这样的,要实例化这两个子类。二、如何解决2。1、分别初始化
  何为分别初始化,所谓分别初始化就是各自初始化自己的,为每个子类分别实现初始化其属性的方法,如下FirstChildfillFirstField(FirstChildfirstChild){firstChild。setName(apple);firstChild。setCode(apple);firstChild。setMyField1(firstChild);returnfirstC}SecondChildfillSecondField(SecondChildsecondChild){secondChild。setName(apple);secondChild。setCode(apple);secondChild。setSecondField1(secondChild);returnsecondC}
  这里作为演示对属性没有全部赋值,如果两个子类相同的属性比较多,那么赋值起来会比较麻烦,而且两个方法的代码重复度会很高。2。2、抽象出一个公共的方法
  既然,已经为两个子类抽象出了公共的属性,那么顺着这个思路下去,也可以抽象出一个公共的方法为这些公共的属性赋值,即为父类填充属性,BaseDOfillField(BaseDObaseDO){baseDO。setName(apple);baseDO。setCode(apple);returnbaseDO;}
  好了,在进行子类初始化的时候已经有一个方法可以初始化其公共属性,那么接下来的事情,就是初始化其自己的属性即可,
  下面就实例化FirstChild,然后初始化其公有属性FirstChildfirstChildnewFirstChild();fillField(firstChild);firstChild。setMyField1(firstChild);System。out。println(firstChild);
  打印出firstChild的结果如下
  可以看到已经把公共属性name、code和特意属性myField1进行赋值,完成了上面的需求。
  可能有些同学会使用下面的写法,
  可以看的该种写法存在错误,提示我们需要的类型是FirstChild,但是我们提供的BaseDO,我们知道fillField方法返回的BaseDO类型,一个父类型的实例不可赋值给子类型的引用(相反一个子类型的实例可以赋值给父类型,典型的多态),这怎么办那,向下类型转换,没错,如下
  细心的小伙伴会问,那为什么fillField方法可以接受FirstChild的实例那,哈哈哈,前边红字提到了多态。
  怎么样,是不是对多态又有了更深的理解。延申一点
  从fillField方法来看,我们知道该方法可以不设返回值,为什么可以不设返回值,因为引用类型,不是传值,可以理解为引用,哈哈,所以叫引用类型,在fillField方法中对其引用类型的参数进行了修改,那么在这个方法执行完了之后,引用这个参数的其他引用同样可以感知到其修改,下面的写法就是很好的佐证,
  是不是又加深了引用和引用的对象间的关系,多说一句引用在jvm的内存模型中是在哪个区,引用指向的对象那?三、总结
  本文分析了在开发过程中,遇到公有属性很多的多个实体类时的设计思路,抽出公有的父类,由父类承担公有属性。并且在进行属性填充的时候,如果公有属性的值是一样的,那么可以抽出公共的方法进行属性填充,这里又提到了多态。
  1、抽出公有属性;
  2、对多态的理解;
  3、向下类型转换;
  4、引用类型的传递;
  最后,广大读者们,对于类似的需求,你们有更好的设计思路吗,欢迎踊跃讨论。
投诉 评论 转载

在java的继承中你是不是也有过这样的疑惑?最近在写代码,有两个属性很相近的类,其中80的属性(字段)都是一样的,剩下的才是各自不一样的,在设计的时候,采用了继承的方式,抽象除了一个父类,大概如下,有FirstCh……成长的故事成长,如同一条缓缓流淌的小溪,悄然地,我们长大了。在这个成长的过程中,我们由幼稚走向成熟,一个又一个成长蜕变的故事由此而发生。记得在我上二年级的时候,我的乘法口诀背得不是……影响成功的五大职场恶习在工作当中,每个人都有自己的行为习惯,但有些坏习惯会成为你实现目标的障碍。下面是五种职场常见的坏习惯,虽然它们不象酗酒和吸毒具有那么明显的破坏性,但绝对会阻碍你取得事业的成功。……CBA三消息广东0比20输给北控,林葳首战送绝杀,西热力江学爱国篮,爱CBA,我是洛姐,小伙伴们看完记得点赞!这个赛季广东队开局就遭遇了很大的麻烦,现在球队由于疫情的关系被隔离了起来,就目前的情况看来,广东队肯定会缺席常规赛开始的……它是名茶银猴的原产地也曾被誉为江它曾被《中国国家地理》誉为江南最后的秘境,这里是名茶银猴的原产地,拥有中国最大的骑行茶园。这里的汉朝木雕是为一绝,被称作一朵在野的雕刻艺术之花,这里的百年高腔堪称戏曲界的……后悔么?上海8千万中锋成软脚蟹体能不足愁坏李春江赛后公开道歉100:103,上海队在和广厦队的第三场比赛当中以三分之差不敌对手,从而遭遇了被横扫的尴尬。按常理来说本场比赛广厦队不仅胡金秋没能登场作战,就连赵岩昊下半场也高挂免战牌,上海队……朱玲玲携老公逛街,二婚老夫妻全程腻歪像热恋,穿得朴素珠宝抢眼各种潮流时尚的元素席卷着人们的审美,影响着绝大部分年轻人的着装风格,而将目光放在中老年人的着装风格上,会发现并没有受到太多主流审美的影响,依旧保持着个人朴素的审美观念,没有盲目……隐藏造句用隐藏造句大全121、有人说,只因绝望才有希望。此话不假。但我觉得那希望其实并不源于绝望,而是在痛苦悲哀地回头,却看到了隐藏在角落的希望,而你立刻抓住了它,也牢牢地抓住了通出陷坑的绳索,你赢……中超联赛再现丑闻!北方传统豪门欠薪曝光,中国足协至今默不作声自从中超联赛打破金元化以后,多支传统豪门球队开始没落。但是,这些以往的豪门球队并没有按照足协的规定办事,反倒是当起了老赖欠薪。在这之前,前中超联赛冠军队伍江苏苏宁队直接宣布解散……女生适合开什么店女生适合开的三种店现在有很多女生开始自己创业、毕竟自己创业开店的话,可以很好地提升自己的运营能力和各项工作技能,那么接下来,我们就来给大家讲解一下女生适合开的三种店。1、母婴店现在随……起床习惯暗示男人情欲心理习惯1:按掉闹钟继续赖床在中国传统的家庭观念中,都是男主外女主内,男人极少有机会参与到家务活中。平日里工作繁忙的工作日,闹钟响了一遍又一遍,可是男人还是不情愿离开暖暖的被……追上造句用追上造句大全1。你能告诉我吗?怎样才能追上你的身影,怎样才能与你相伴不离?2。追上未来,抓住它的本质,把未来转变为现在。车尔尼雪夫斯基3。赤利欢快地长吠一声,跳下礁石尾追上去,……
最新战报!男单前四大种子3人被淘汰,韩国独苗强势进四强情怀终究比不过现实,恩比德被曝退出喀麦隆国籍,加盟法国男篮羊肉是结节癌症加速器?不想惹上结节癌症的,这3种肉,尽早管住命运跟富尔茨开起了玩笑!希望这种痛苦,他不要再体验到了新工体新征程回家的感觉真好2022年幽默风趣富有哲理的金句(五七)长途旅行自驾开车,不得不注意的汽车八大问题!关键时候能保命今年冬天短外套裤子最流行,显高显瘦巨时髦这才是中国34省份最值得去的地方,个个颜值逆天,此生不去心难我国首颗陆地生态系统碳监测卫星句芒号成功发射赵丽颖为智齿拍美照,被爆和冯绍峰将再度合作后,越来越接地气姆巴佩恋上富二代,同游笑开花,准岳母是超模,或因女友留巴黎?
国羽世界第一20吊打日本组合!陈清晨WC响彻全场,引起争议酒鬼进到动物园听到河马惨叫华晨宇承认当爸爸,张碧晨赢了什么?热闻聚热点网 夏季如何收缩和细致毛孔打造零毛孔陶瓷肌男生留什么刘海好看最新流行刘海示范国际油价大跌,现阶段供需情况如何?小鹏汽车突然面临死亡的危机,到底是谁带来的?结婚后打好婆媳关系媳妇必知7件事沉默的真相开局高能,却虎头蛇尾,剧情无力是致命问题高一写人作文外婆蝴蝶蝴蝶你爱过吗宽容是他人,善待自己作文

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁