阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?

发布时间:2019-11-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

摘要: 原创出处 https://www.bysocket.com公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

目录

  1. 父子类变量名相同会咋样?
  2. 为啥强制子类、父类变量名不同?
  3. 可落地项目小思考

一、父子类变量名相同会咋样?

有个小故事,今天群里面有个人问下面如图输出什么?

阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?

我回答:60。但这是错的,答案结果是 40 。我知错能改,然后说了下父子类变量不建议同一个名称。

可见,父子变量名相同会令人 “Confusing”。再举个例子,新建 ParentClass 类:

public class ParentClass {     public String name = "parent";          public static void main(String[] args) {         ParentClass parentClass = new SonClass();         SonClass sonClass = new SonClass();              System.out.PRintln("parentClass.name = " + parentClass.name);         System.out.println("sonClass.name = " + sonClass.name);         System.out.println("debug...");     } }  class SonClass extends ParentClass {     public String name = "son"; }

上面如果答对的,这个肯定知道结果。运行程序打印如下:

parentClass.name = parent sonClass.name = son debug...

断点到 System.out.println("debug..."); 该行,debug 下如图:

阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?

debug 后,答案显然:

  • 前面两行,new 出来两个不同 SonClass 实例
  • 每个实例都会有子类的成员变量以及父类的成员变量,这个叫做实例变量
  • 如果是 String 的值,都会指向 JVM 常量池。所以看出 sonparent 两个 String 的对应指针数一样,一个为 440/一个为 439

这就引出了变量的知识点,如手工画的图:

阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?

二、为啥强制子类、父类变量名不同?

阿里巴巴 Java 手册是这样写的:

【强制】避免在子父类的成员变量之间或者不同代码块的局部变量之间采用完全相同的命名方式,那会导致代码可读性降低。

说明:子类、父类成员变量名相同,即使属性是 public 也是能通过编译,虽然局部变量不在同一方法内的不同代码中同名也是合法的,但避免使用。 setter / getter 的参数名称也避免成员变量名相同。

具体的反例我也不写了。为啥强制,显而易见有几点:

  • 可以提高代码可读性

    • 减少新人看代码时不必要的困惑
    • 减少重构时不必要的困惑
    • ...
  • 多次使用能值出同

正确的例子 ParentClass 类:

public class ParentClass {     public String parentName = "parent";          public static void main(String[] args) {         ParentClass parentClass = new SonClass();         SonClass sonClass = new SonClass();              System.out.println("parentClass.parentName = " + parentClass.parentName);         System.out.println("sonClass.sonName = " + sonClass.sonName);         System.out.println("debug...");     } }  class SonClass extends ParentClass {     public String sonName = "son"; }

两种写法的优缺点,一目了然。

三、可落地小总结

这里是说了一种代码风格,类似味道。本身不影响程序运行,没有所谓的潜在故障和错误。那么味道的好处总会能体验到。

  • 比如这里谈到继承,OOP 讲究:高内聚,低耦合;多组合,少继承。比如控制语句,推荐多层嵌套不超过 3 层。那继承也一样:推荐继承关系不超过 3 层。
  • 还有 Boolean 成员变量定义,命名不要加 is 前缀。不然 getter 方法会少了 is,部分解析会引起序列化问题。我的做法:在设计数据库表字段的时候,不考虑 Boolean ,用 Byte 类型去处理。这样 is 不 is 就不 care 了。
  • ...

好的命名规约,好的编码风格,简捷清爽,引出无限风光

代码示例

本文示例读者可以通过查看下面仓库的中的 alibaba/java/ParentClass.java

如果您对这些感兴趣,欢迎 star、follow、收藏、转发给予支持!

参考资料

以下专题教程也许您会有兴趣

阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?

脚本宝典总结

以上是脚本宝典为你收集整理的阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?全部内容,希望文章能够帮你解决阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。