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

  • 时间:
  • 浏览:1
  • 来源:大发快三_快三官方_大发快三官方

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

目录

  1. 父子类变量名相同会怎样才能?
  2. 为什么在强制子类、父类变量名不同?
  3. 可落地项目小思考

有个小故事,今天群上端有另一方问下面如图输出哪几个?

我回答:30。但这是错的,答案结果是 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 下如图:

debug 后,答案显然:

  • 前面两行,new 出来另一有另四个不同 SonClass 实例
  • 每个实例后会有子类的成员变量以及父类的成员变量,這個叫做实例变量
  • 假如有一天是 String 的值,后会指向 JVM 常量池。不多不多看出 son 和 parent 另一有另四个 String 的对应指针数一样,另一有另四个为 440/另一有另四个为 439

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

阿里巴巴 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 :

  • Github:https://github.com/JeffLi1993/java-core-learning-example
  • Gitee:https://gitee.com/jeff1993/java-core-learning-example

假如有一天您对哪几个感兴趣,欢迎 star、follow、收藏、转发给予支持!

参考资料

  • 阿里 Java 手册系列教程:https://www.bysocket.com/archives/230
  • 《阿里巴巴 Java 开发手册》

以下专题教程他们说您会有兴趣

  • 《Spring Boot 2.x 系列教程》
  • 《Java 核心系列教程》

(关注微信公众号,领取 Java 精选干货学习资料)