范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  最近在写代码,有两个属性很相近的类,其中80%的属性(字段)都是一样的,剩下的才是各自不一样的,在设计的时候,采用了继承的方式,抽象除了一个父类,大概如下,
  有FirstChild和SecondChild两个类,因为其中的属性name、code等是相同的,为此抽出了一个父类BaseDO,如下 package com.example.day01;  public class BaseDO {     private String name;     private String code;     private String field1;     private String field2;      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getCode() {         return code;     }      public void setCode(String code) {         this.code = code;     }      public String getField1() {         return field1;     }      public void setField1(String field1) {         this.field1 = field1;     }      public String getField2() {         return field2;     }      public void setField2(String field2) {         this.field2 = field2;     }      @Override     public String toString() {         return "BaseDO{" +                 "name="" + name + """ +                 ", code="" + code + """ +                 ", field1="" + field1 + """ +                 ", field2="" + field2 + """ +                 "}";     } }
  FirstChild package com.example.day01;  public class FirstChild extends BaseDO{     private String myField1;     private String myFiled2;      public String getMyField1() {         return myField1;     }      public void setMyField1(String myField1) {         this.myField1 = myField1;     }      public String getMyFiled2() {         return myFiled2;     }      public void setMyFiled2(String myFiled2) {         this.myFiled2 = myFiled2;     }      @Override     public String toString() {         return "FirstChild{" +                 "myField1="" + myField1 + """ +                 ", myFiled2="" + myFiled2 + """ +                 "} " + super.toString();     } }
  SecondChild package com.example.day01;  public class SecondChild extends BaseDO{     private String secondField1;     private String secondField2;      public String getSecondField1() {         return secondField1;     }      public void setSecondField1(String secondField1) {         this.secondField1 = secondField1;     }      public String getSecondField2() {         return secondField2;     }      public void setSecondField2(String secondField2) {         this.secondField2 = secondField2;     }      @Override     public String toString() {         return "SecondChild{" +                 "secondField1="" + secondField1 + """ +                 ", secondField2="" + secondField2 + """ +                 "} " + super.toString();     } }
  从上面可以看到两个子类除了含有父类的属性外还有自己各自的属性,现在有个需求是这样的,要实例化这两个子类。 二、如何解决2.1、分别初始化
  何为分别初始化,所谓分别初始化就是各自初始化自己的,为每个子类分别实现初始化其属性的方法,如下 FirstChild fillFirstField(FirstChild firstChild){          firstChild.setName("apple");         firstChild.setCode("apple");         firstChild.setMyField1("first Child");          return firstChild;     } SecondChild fillSecondField(SecondChild secondChild){          secondChild.setName("apple");         secondChild.setCode("apple");         secondChild.setSecondField1("second Child");         return secondChild;     }
  这里作为演示对属性没有全部赋值,如果两个子类相同的属性比较多,那么赋值起来会比较麻烦,而且两个方法的代码重复度会很高。 2.2、抽象出一个公共的方法
  既然,已经为两个子类抽象出了公共的属性,那么顺着这个思路下去,也可以抽象出一个公共的方法为这些公共的属性赋值,即为父类填充属性, BaseDO fillField(BaseDO baseDO){         baseDO.setName("apple");         baseDO.setCode("apple");         return baseDO;     }
  好了,在进行子类初始化的时候已经有一个方法可以初始化其公共属性,那么接下来的事情,就是初始化其自己的属性即可,
  下面就实例化FirstChild,然后初始化其公有属性 FirstChild firstChild=new FirstChild();         fillField(firstChild);         firstChild.setMyField1("first Child");         System.out.println(firstChild);
  打印出firstChild的结果如下
  可以看到已经把公共属性name、code和特意属性myField1进行赋值,完成了上面的需求。
  可能有些同学会使用下面的写法,
  可以看的该种写法存在错误,提示我们需要的类型是FirstChild,但是我们提供的BaseDO,我们知道fillField方法返回的BaseDO类型,一个父类型的实例不可赋值给子类型的引用( 相反一个子类型的实例可以赋值给父类型,典型的多态 ),这怎么办那,向下类型转换,没错,如下
  细心的小伙伴会问,那为什么fillField方法可以接受FirstChild的实例那,哈哈哈,前边红字提到了多态。
  怎么样,是不是对多态又有了更深的理解。 延申一点
  从fillField方法来看,我们知道该方法可以不设返回值,为什么可以不设返回值,因为引用类型,不是传值,可以理解为引用,哈哈,所以叫引用类型,在fillField方法中对其引用类型的参数进行了修改,那么在这个方法执行完了之后,引用这个参数的其他引用同样可以感知到其修改,下面的写法就是很好的佐证,
  是不是又加深了引用和引用的对象间的关系,多说一句引用在jvm的内存模型中是在哪个区,引用指向的对象那? 三、总结
  本文分析了在开发过程中,遇到公有属性很多的多个实体类时的设计思路,抽出公有的父类,由父类承担公有属性。并且在进行属性填充的时候,如果公有属性的值是一样的,那么可以抽出公共的方法进行属性填充,这里又提到了多态。
  1、抽出公有属性;
  2、对多态的理解;
  3、向下类型转换;
  4、引用类型的传递;
  最后,广大读者们,对于类似的需求,你们有更好的设计思路吗,欢迎踊跃讨论。

芯片不景气!三星利润暴跌69,创8年新低全球经济低迷削弱了对电子设备的需求,也给存储芯片行业前景蒙上了一层阴影。三星周五公布,该公司第四季度(截至去年12月的3个月)营业利润预计将从去年同期的13。87万亿韩元下降近69快充真卷到头了?GTNeo5外观配置曝光丨三星机皇新增猛男配色真我GTNeo5将于2月份发布,亮点之一就是240W有线充,比此前红米的210W还要猛一点,官方表示这是手机闪充赛道终结者,大家认为这个充电速度算是到头了吗?苹果我会出手,15w充手机行业失败芯片盘点高通骁龙810高居榜首,A16处理器也在其中文小伊评科技昨天笔者汇总了一下从智能手机行业诞生以来,手机芯片市场中那些能够被称作是神U的产品,也得到了大家广泛的认同,包括麒麟990,骁龙855,天玑8100这些耳熟能详的神U也理财破净率近20赎回压力增大理财公司自购产品增强市场信心理财产品破净潮下,多家银行理财子公司以自有资金认购旗下理财产品。中国科技投资张婷杨永洁2022年是关于规范金融机构资产管理业务的指导意见(以下简称资管新规)过渡期结束的第一年,理财尖嘴长吻像蜥蜴中国发现2。44亿年前海生爬行动物奇异罗平龙奇异罗平龙化石正型标本。中新社记者孙自法摄中新网北京1月6日电(记者孙自法)记者从中国科学院古脊椎动物与古人类研究所(中科院古脊椎所)获悉,该所科研人员对采自云南省罗平县一件远古动智能水表广泛使用的原因有哪些?近些年来,使用智能水表的用户在日益剧增,受欢迎的智能水表已经逐渐的在取代传统的水表。目前有很多用户都在搜索智能水表哪个公司的好想要从该公司购买质量好的智能水表。从目前的市场情形来看春节临近猪价仍未有起色龙头2022年12月出栏价环比跌超20农历新年已经临近,生猪市场的弱势却仍未有改善。近日生猪养殖行业上市公司披露的2022年12月销售数据显示,当月龙头企业商品猪销售均价环比11月下降超过20。在猪价持续不振背景下,当赵本山的4位徒弟现状出轨女粉住桥洞种地的,唯她锒铛入狱一年一度的春节马上就要开始了,亿万观众期待的春晚,也在如火如荼地进行着彩排,有很多我们熟悉的演员,特别期待他们的表演。同时,也怀念那些曾经在春晚创造辉煌的老一辈艺术家,比如说赵本山湖南卫视三部大剧来袭,医疗田园题精彩,刘亦菲张晚意各一部湖南卫视三部大剧来袭,医疗田园题材精彩,刘亦菲张晚意各一部临近岁末年初,各种好剧轮番上演。尤其是近段时间,县委大院回家的女儿等都市悬疑剧屡屡抢占各大收视平台榜首,让观众看得十分过瘾赵丽颖的后劲是否有些不足?能否接班孙俪?今年势头最强的内娱女星是谁?抛开被韩影捧在掌心上的汤唯不谈,那就只有她了赵丽颖。在行业气候并不景气的今年,她接连破局。从偶像剧中华丽转身,敢土。豆瓣7。0分的幸福到万家,她扮演一位侯耀华收三国混血女徒弟安娜金,拜师后送徒弟奢侈品被发现是假货侯耀华收了个女徒弟叫安娜金,安娜拜师并不是想要学相声,只是想借助侯耀华的名气打开自己的知名度。作为师父侯耀华送给她了奢侈品包包做礼物,没想到被眼尖的网友发现是假货。侯耀华的起步非常
新老中锋19与20分钟的表现天差地别,一个1212两双一个全场挂零球迷们期待已久的广深大战终于完美地落下帷幕,深圳队靠着大外援萨林杰和老将顾全的出色发挥最终以9190,1分险胜广东队。本场比赛之所以饱受关注,除了两队是同省德比大战之外,实力基本也名单确定!WTT澳门冠军赛将开打,陈幸同获外卡,许昕刘诗雯缺席北京时间10月15日,媒体报道国乒运动员林高远和陈幸同获得参加WTT澳门冠军赛2022外卡资格,他们将与其他球员一起,在澳门争夺通往新乡WTT世界杯决赛2022的名额。比赛将在10奥运冠军庄泳退役后当CEO,50岁越来越漂亮,孩子入外国籍现在的中国游泳队,有许多天赋异禀的年轻人,他们在世界大赛上都取得了出色的成绩,像现役张雨霏徐嘉余汪顺傅园慧等人,实力就很强大,也拥有很高的人气。不过昔日的中国泳队,其实算不上强队,国乒队史10大美女,丁宁车晓曦领衔,现役五朵金花谁该上榜?趁着成都世乒赛结束,澳门冠军赛尚未开战的当口,发点关于国乒女队的八卦,增加点篮球的情趣。昨天更新了世界乒坛现役10大美女,引起了不少朋友的驻足和关注,不得不承认日本乒乓球运动员在颜央视拒播!辽宁男篮战青岛争三连胜,师兄弟斗法刘维伟或难招架目前CBA常规赛第1阶段的比赛正在杭州如火如荼地进行当中,而卫冕冠军辽宁男篮在前两轮的比赛当中分别战胜了广厦队和北京首钢队赢得了两连胜。两场比赛,辽宁男篮自身的发挥也并不是很出色,青春是用来奋斗的青春里,我们需要奋斗的有太多,我们的梦想也都确立。奋斗成为了我们青春时期对梦想进发的脚步。青春正好,奋斗不悔,我们的青春是一段美好的时光。青春的我们应该用我们的激情与精力来为我们的开启意大利联赛生涯,年薪120万的朱婷实际到手有多少?数字感人千呼万唤,朱婷终于踏出了复出的第一步,10月10日,改变了造型,留着清爽短发的朱婷前往意大利佛罗伦萨的斯坎迪奇小镇和球队会和,在第一次的亮相中,朱婷还是给意大利的球迷带来了惊喜,朱利物浦VS曼城首发曝光渣叔最强出击,王牌指挥官回归,萨神领衔北京时间10月16日晚2330,英超联赛第11轮将上演一场引人关注的天王山之战,红军利物浦坐镇主场迎战卫冕冠军曼城。这个赛季,利物浦的状态一落千丈,前面8轮英超战罢,渣叔的球队仅仅意大利女排战胜美国队,夺得世锦赛季军,埃格努心有不甘,落泪了2022年女排世锦赛进入最后的两场比赛啦。首先进行的是季军战,由意大利女排对阵美国女排。这是一场不亚于冠军战的强强对话。两支球队都是世界性的强队,都被看作是本届世锦赛的夺冠大热门。瓜帅利物浦仍是最强竞争对手积分榜代表不了什么尽管利物浦本赛季开局低迷,但曼城主教练瓜迪奥拉仍然认为利物浦是竞争联赛冠军的最强对手。曼城目前在英超排名第二,而利物浦排名第十。瓜迪奥拉表示,这并不意味着曼城在比赛中占据优势对于一CBA新疆男篮被北控击败后,阿的江或重磅出手,这3名球员该休息了北京时间10月15日,202223赛季CBA常规赛第3轮,深圳男篮险胜老对手广东男篮,其中,深圳男篮的顾全本场命中7记三分。他的CBA生涯三分球命中数达到974个,超越龚松林,升至