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

让你怀疑人生的重载和重写的区别

  内容90%翻译修改自https://software.rajivprab.com/2019/08/14/nuances-of-overloading-and-overriding-in-java/
  如果你认为你对java的重载和重写已经很了解了,那么我想通过下面的例子你可能会感到怀疑人生了。如果你能完全回答对下面的题目,那我觉得你真的非常非常牛X了。 单一调度  class Parent {   void print(String a) { log.info("Parent - String"); }   void print(Object a) { log.info("Parent - Object"); } }   class Child extends Parent {   void print(String a) { log.info("Child - String"); }   void print(Object a) { log.info("Child - Object"); } }
  下面将会打印什么? String string = ""; Object stringObject = string;   // 打印什么? Child child = new Child(); child.print(string); child.print(stringObject);   Parent parent = new Child(); parent.print(string); parent.print(stringObject);
  答案: child.print(string);        // 打印: "Child - String" child.print(stringObject);  // 打印: "Child - Object"   parent.print(string);       // 打印: "Child - String" parent.print(stringObject); // 打印: "Child - Object"
  print(string)和 parent.print(string)是 Java 面向对象程序设计的教科书示例。 被调用的方法取决于实际的实例类型,而不是声明的实例类型。例如,无论你将变量定义为 Child 还是 Parent,因为实际的实例类型是 Child,都将调用 Child: : print。
  第二组则更为复杂,因为都是完全相同的字符串。唯一的区别是字符串被声明为 String,而 stringObject 被声明为 Object。在处理方法参数时, 重要的是参数的声明类型,而不是它的实际类型。即使实际参数类型是 String,也会调用 print (Object)隐式重写  class Parent {   void print(Object a) { log.info("Parent - Object"); } }   class Child extends Parent {   void print(String a) { log.info("Child - String"); } }
  打印什么? String string = ""; Parent parent = new Child(); parent.print(string);
  答案: parent.print(string);  // 打印: "Parent - Object"
  实际的实例类型是 Child,声明的参数类型是 String,我们确实有一个为 Child: : print (String)定义的方法。实际上,这正是在前一个示例中调用 parent.print (string)时选择的内容。但是,这并不是在这里调用的方法。
  在检查子类重写之前,Java 似乎首先选择要调用哪个方法。在这种情况下,声明的实例类型是 Parent,Parent 中唯一匹配的方法是 Parent: : print (Object)。然后,当 Java 检查 Parent: : print (Object)的任何潜在重写时,它没有找到任何重写,因此这就是执行的方法。 显式重写  class Parent {   void print(Object a) { log.info("Parent - Object!"); }   void print(String a) { throw new RuntimeException(); } }   class Child extends Parent {   void print(String a) { log.info("Child - String!"); } }
  打印什么? String string = ""; Parent parent = new Child(); parent.print(string);
  答案: parent.print(string);  // 打印: "Child - String!"
  这个示例与前面的示例之间的唯一区别是,我们添加了一个新的 Parent: : print (String)方法。这个方法实际上从来没有被执行过——如果它运行了,它会抛出一个异常!然而,它的存在使 Java 执行了一个不同的方法。
  在计算 Parent.print (String)时,运行时现在找到一个匹配的 Parent: : print (String)方法,然后看到这个方法被 Child: : print (String)重写。 模糊参数  class Foo {   void print(Cloneable a) { log.info("I am cloneable!"); }   void print(Map a) { log.info("I am Map!"); } }
  下面打印的是什么? HashMap cloneableMap = new HashMap(); Cloneable cloneable = cloneableMap; Map map = cloneableMap;   // What gets printed? Foo foo = new Foo(); foo.print(map); foo.print(cloneable); foo.print(cloneableMap);
  答案: foo.print(map);           // 打印: "I am Map!" foo.print(cloneable);     // 打印: "I am cloneable!" foo.print(cloneableMap);  // 编译不通过
  与单一调度示例类似,这里 重要的是参数的声明类型,而不是实际类型。另外,如果有多个方法对于给定的参数同样有效,Java会抛出一个编译错误,并强制你指定应该调用哪个方法。多重继承-接口  interface Father {   default void print() { log.info("I am Father!"); } }   interface Mother {   default void print() { log.info("I am Mother!"); } }   class Child implements Father, Mother {}
  下面打印的是什么? new Child().print();
  与前面的示例类似,这个示例也编译不通过。具体地说,Child 的类定义本身将无法编译,因为在 Father 和 Mother 中存在冲突的缺省方法。你需要修改 Child 类指定 Child: : print 的行为。 多重继承-类和接口  class ParentClass {   void print() { log.info("I am a class!"); } }   interface ParentInterface {   default void print() { log.info("I am an interface!"); } }   class Child extends ParentClass implements ParentInterface {}
  打印什么? new Child().print();
  答案: new Child().print();  // 打印: "I am a class!"
  如果类和接口之间存在继承冲突,那么类方法优先。 传递性重写  class Parent {   void print() { foo(); }   void foo() { log.info("I am Parent!"); } }   class Child extends Parent {   void foo() { log.info("I am Child!"); } }
  打印什么? new Child().print();
  答案: new Child().print();  // 打印: "I am Child!"
  重写方法甚至对传递调用也会生效,阅读 Parent 类的人可能认为 Parent: : print 总是会调用 Parent: : foo。但是如果该方法被重写,那么 Parent: : print 将调用重写后的 foo ()版本。 私有重写  class Parent {   void print() { foo(); }   private void foo() { log.info("I am Parent!"); } }   class Child extends Parent {   void foo() { log.info("I am Child!"); } }
  打印什么? new Child().print();
  答案: new Child().print();  // 打印: "I am Parent!"
  除了一点不同之外,这个与前一个例子完全相同。现在将 Parent.foo()声明为 private。因此,当 Parent.print()调用 foo()时,不管子类中是否存在 foo()的其他实现,也不管调用 print()的实例的实际类型如何。 静态重写  class Parent {   static void print() { log.info("I am Parent!"); } }   class Child extends Parent {   static void print() { log.info("I am Child!"); } }
  打印什么? Child child = new Child(); Parent parent = child;   parent.print(); child.print();
  答案: parent.print(); // 打印: "I am Parent!" child.print();  // 打印: "I am Child!"
  Java 不允许重写静态方法。如果在父类和子类中定义了相同的静态方法,那么实例的实际类型根本不重要。只有声明的类型用于确定调用两个方法中的哪一个。
  这是使用@override注解标记所有重写方法的另一个原因。在上面的例子中,在向 Child: : print 添加注解时,你会得到一个编译错误,告诉你由于方法是静态的,因此无法重写该方法。 静态链接  class Parent {   void print() { staticMethod(); instanceMethod(); }   static void staticMethod() { log.info("Parent::staticMethod"); }   void instanceMethod() { log.info("Parent::instanceMethod"); } }   class Child extends Parent {   static void staticMethod() { log.info("Child::staticMethod"); }   void instanceMethod() { log.info("Child::instanceMethod"); } }
  打印什么? Child child = new Child(); child.print();
  答案: Parent::staticMethod Child::instanceMethod
  这是我们之前讨论过的一些不同概念的组合。例如,即使调用方位于父方法中,重写也会生效。但是,对于静态方法,即使变量的声明类型是 Child,也要调用 Parent: : staticMethod,因为有中间 print ()方法。 总结
  如果说有什么值得注意的地方,那就是继承非常非常棘手,而且很容易出错。
  - END -

李小龙这部电影上映还出动了警察维持秩序,影院都被迫暂停了营业大家好,今天我来和大家聊的是李小龙,相信很多人听到了这个名字并不会感到陌生,有的朋友也看过李小龙演的很多影视剧,剧中李小龙的身手很好打起来让人会很痛快,解恨,今天我们就来聊一聊吧。成龙的这部电影总共花了1,2亿,2004年香港票房却仅有2111万港元大家好,大家对成龙这个名字应该不陌生,今天我们聊一聊成龙的故事,成龙2004年上映的一部电影新警察故事,影片当中的演员有成龙和谢霆锋和吴彦祖和伍佰等,影片中表演的都很出色。上个世纪新一季撒娇高手霸道总裁头衔的德云社大少爷郭麒麟霸道总裁头衔郭麒麟,德云社的大少爷,真的是好会撒娇一男的,具备说相声的人都具有的能说会道,同时长得偏软萌,到哪都会受到更偏爱的照顾,其他男神都在对他展现男友力!郭麒麟在密室大逃脱2谢霆锋儿子连动作神态都有些谢霆锋的影子,母子泳池游泳十分有爱母子俩在某泳池玩耍,身后不远处还有人群。张柏芝穿着白色T恤,第二张图,头上戴着黑色印花发带,打扮简单又不失时尚。二儿子Quintus则穿着黑色泳衣,头上戴着荧光橙色的泳镜,一头湿发黄子韬搞笑回复黄轩眼妆,是不是自己失散多年的哥哥,还挺幽默生活中很多人都会化妆,明星化妆也是必不可少的,他们的妆容经常会强调眼妆然后配合衣服。但不是所有眼睛都适合化眼妆,像单眼皮肿眼泡,对比一下黄轩与黄子韬火箭少女Yamy,王一博和郑秀文香港票房1600万,上映15天就匆匆下映了,这句对白你知道吗大家好,今天我和大家聊一聊李连杰这部影片中的故事,就是精武英雄,大家可能有看过,接下来我们就一起来聊。陈嘉上是李小龙的粉丝,但对精武门却表示不赞同,在影片精武门当中表达的信息是打败陈嘉上不知道怎么拍,就让周星驰自己发挥,其实这段是吴孟达导的大家好,今天和大家聊的是周星驰星爷,在1992年的时候,陈嘉上本来想拍影片飞虎可是资金不足,就和周星驰先拍摄了武状元苏乞儿,接下来我们就一起来聊一聊这部影片的故事。在1992年的时贵州小伙太有才,实木打造能跑的汽车和自行车,真是高手在民间给你一堆木头,你会用来干什么?出现在脑海中的第一个念头是不是烧火做饭,视频中这位小哥,他干起木匠活来如有神助,小到手机壳,抽纸盒,大到汽车直升机。长枪短炮加特林做起来得心应手,包包在一个剧组王俊凯又瘦了,徐峥啤酒肚明显又大了,网友心疼王俊凯徐峥新电影我和我的家乡路透照曝光,7月8日下午徐峥与王俊凯现身杭州千岛湖。此次演员阵容也很有看点,黄渤胡歌吴京雷佳音等人个个都是实力派演员,青年演员刘昊然董子健也同样演技不俗。还有呦呦鹿鸣,食野之蒿。莫言之言,我不看好刚看了屠呦呦院士的演讲视频,心头竟然被她的演讲感染的诗意盎然呦呦鹿鸣,食野之蒿屠妈妈穿着标准中国元素的宝石蓝唐装,在欧美学者的簇拥下走向讲台。她没有获奖者的居高临下,更没有某些公知河南央视谁情长?七夕晚会问牛郎今年七夕,意义非凡和天上那三位国宝宇航员一样,人间很多抗疫抗洪英雄,都将在战斗一线,度过七夕的朝朝暮暮。但,这不会影响中国人千年的浪漫情怀。今年七夕,非同寻常河南卫视,湖南卫视等各
三十而已风头盖过重启,热搜不断,原来不无道理最近几天,只要剧集一更新,必定就能上热搜,而且不只是上热搜,一上还不止一条。这种热度,即使是小编盼望已久的重启,都稍逊几分。说到这里,朋友们大概也猜到是哪部剧了。没错,就是三十而已双探中最狠的三个反派,邢佳栋实力诠释冷面反派最近,由段奕宏大鹏主演的双探又火爆了全网。段奕宏和大鹏的演技没得说,段奕宏不出则已,出必是精品,大鹏每部作品也是可圈可点。但今天小编想说的并不是这两位主演,今天,小编要跟大家分享一哥哥塌房,叔叔出圈,看来真正的宝藏还是能称得上叔叔的人最近内娱有点风波不断,曾经被万千粉丝追捧的哥哥,有的以选秀之名行选妃之实成了阶下囚有的不知到底是无知者无畏,还是有意为之,多次行冒犯全体国人情感冒犯国家之事沦为人人唾弃的精日分子还鸿胪井,中华神器首席,被日本强盗偷至日本皇宫至今未还1910年,只见一群日寇在我国旅顺区域的渤海国遗址处,用各种器械搬运着一颗华丽的天然玉雕巨玉石。这颗巨玉石,在阳光的照射下,闪闪发亮,石头上具备深度的文字诉说着自己悠久而璀璨的历史中华门大侠携神兵红牛散步后花园,吓得菜妖精惊慌失措龙英雄创建的龙威门,是世界武林中的名门正派,龙威门是一个热爱正义捍卫武林公义的门派,曾经多次和魔教天阴教进行殊死战斗。龙威门的东南方向有一个后花园,后花园是龙威门自古以来不可或缺的本聪大师紫气东来兆华夏崛起,万众一心建立美丽中华作者正能量憨叔。明朝有一堪舆大师,名唤本聪大师,本聪大师带着弟子小聪和尚在帝都行走之时,忽然发现一群市民对着天空惊讶大叫。本聪大师顺着市民的眼光望向天空,只见帝都的天空上出现了一朵有种基因叫佟大为老婆,仨孩子用一张脸,不说也知道是亲姐弟说起幸运的明星,事业家庭顺风顺水的佟大为一定算一个。虽然他是一个很知名的演员,但他生活的状态非常贴近普通人,明明是在演艺圈混,但却又像就是住在你家隔壁的一哥们儿。佟大为真的非常幸运50岁张嘉译,隐藏了15年的二婚老婆,原来是身价24亿的富婆张嘉译是娱乐圈当中比较罕见的,人到中年依旧非常有魅力的男明星,其实张嘉译的事业并没有现在想象的那么顺利,在从北京电影学院毕业之后,开始面试,但是处处碰壁,到2000年的时候依旧是北股权转让还是股权划转?如何选择最优方案?案例ABC公司为集团公司,下设100控股的子公司,子公司又100控制了一家农业公司(相当于农业公司是ABC公司的孙公司),因为农业公司业务增长迅速,为了加强对农业公司的业绩管理和考私车公用,老生常谈但还是争议不断私车公用,是一个老生常谈的话题了,但实务中,还是争议不断。这两天有个会计朋友和税小念抱怨到公司的名下一直没有车,老板又不愿意买,总是让我开自己的车出差办事,开车的加油费用需要找财务郑爽偷逃税被罚2。99元,要坐牢吗?举报人张恒会得到多少奖励?偷税漏税处罚标准1逃避缴纳稅款数额较大并且占应纳税额百分之十以上的,处三年以下有期徒刑或者拘役,并处罚金。2数额巨大并且占应纳税额百分之三十以上的,处三年以上七年以下有期徒刑,并处