父子类变量名相同会咋样

父子变量名相同会令人 “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

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

file

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

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

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

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

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

  • 可以提高代码可读性
    • 减少新人看代码时不必要的困惑
    • 减少重构时不必要的困惑
  • 多次使用能值出同源

 

三、可落地小总结

这里是说了一种代码风格,类似味道。本身不影响程序运行,没有所谓的潜在故障和错误。那么味道的好处总会能体验到。
* 比如这里谈到继承,OOP 讲究:高内聚,低耦合;多组合,少继承。比如控制语句,推荐多层嵌套不超过 3 层。那继承也一样:推荐继承关系不超过 3 层。
* 还有 Boolean 成员变量定义,命名不要加 is 前缀。不然 getter 方法会少了 is,部分解析会引起序列化问题。我的做法:在设计数据库表字段的时候,不考虑 Boolean ,用 Byte 类型去处理。这样 is 不 is 就不 care 了。
* …

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

01public class ParentClass {
02    public String name = "parent";
03 
04    public static void main(String[] args) {
05        ParentClass parentClass = new SonClass();
06        SonClass sonClass = new SonClass();
07 
08        System.out.println("parentClass.name = " + parentClass.name);
09        System.out.println("sonClass.name = " + sonClass.name);
10        System.out.println("debug...");
11    }
12}
13 
14class SonClass extends ParentClass {
15    public String name = "son";
16}

转载于:https://www.cnblogs.com/xch-xiaocheng/p/parent_son_class_eq.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值