摘要:所以看出和两个的对应指针数一样,一个为一个为这就引出了变量的知识点,如手工画的图二为啥强制子类父类变量名不同阿里巴巴手册是这样写的强制避免在子父类的成员变量之间或者不同代码块的局部变量之间采用完全相同的命名方式,那会导致代码可读性降低。
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!
目录
父子类变量名相同会咋样?
为啥强制子类、父类变量名不同?
可落地项目小思考
一、父子类变量名相同会咋样?有个小故事,今天群里面有个人问下面如图输出什么?
我回答: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 下如图:
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/arch...
《阿里巴巴 Java 开发手册》
以下专题教程也许您会有兴趣《Spring Boot 2.x 系列教程》
《Java 核心系列教程》
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77486.html
摘要:面试通关要点汇总集部分解答说明如果你有幸能看到的话,本文整体框架来自阿里梁桂钊的博文,总结的非常不错。这样做的目的是对内部数据进行了不同级别的保护,防止错误的使用了对象的私有部分。被继承的类称为基类和父类或超类。 showImg(https://segmentfault.com/img/remote/1460000013442471?w=1280&h=819); Java面试通关要点汇...
摘要:对象的引用关键字总是指向调用该方法的对象。根据出现位置的不同,作为对象的默认引用有两种情形。构造器中引用该构造器正在初始化的对象。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。 类和对象 定义类 面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),其中类是某一批对象的抽象,可以把类理解成...
摘要:强制存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。正例淘宝订单状态有已下单待付款已付款待发货已发货已收货等。确定指导后续设计与演化的原则。 showImg(https://segmentfault.com/img/remote/1460000016159838?w=1215&h=642); 1、【强制】存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。 说...
摘要:继承的出现让类与类之间产生了关系,提供了多态的前提。继承的注意事项继承的注意事项在中,类只支持单继承,不允许多继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。 01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类, ...
阅读 1916·2023-04-25 16:19
阅读 3056·2021-11-24 09:39
阅读 783·2021-11-16 11:44
阅读 1643·2019-08-29 12:52
阅读 1114·2019-08-26 13:33
阅读 1051·2019-08-26 10:26
阅读 2182·2019-08-23 16:42
阅读 2548·2019-08-23 14:37