V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fxxkingduck
V2EX  ›  问与答

撸 Java se 基础部分遇到了关于类的封装的一个小疑惑,已贴代码

  •  
  •   fxxkingduck · 2019-01-20 10:17:23 +08:00 · 1037 次点击
    这是一个创建于 1916 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下面的代码中,Order 类将数据成员 orderId 和 orderName 设为私有属性,
    同时在类中重写 equals 方法用于比较两个 Order 类的属性是否相等 ,
    在该方法中接收一个类型为 Object 的形参 obj 并之后将其向下转型为 Order 类时,
    为什么可以直接调用两个私有属性而不是使用私有属性的 get & set 方法?
    (Order 类将属性封装起来,那么 Order 类实例化的对象不是只能通过 get & set 才能修改 /使用对象中的私有属性么)


    PS:求 V 友解惑,可能问题没那么高大上,也许不配在 V2 上提问,希望不要吐槽,感谢

    lhx2008
        1
    lhx2008  
       2019-01-20 10:30:09 +08:00   ❤️ 1
    private 是 “类私有”,而不是对象私有,所以同类对象之间是可以互相访问私有变量的,但是正确的做法显然是尊重封装,使用公有方法。
    hellojinjie
        2
    hellojinjie  
       2019-01-20 10:30:26 +08:00   ❤️ 1
    private public protected 访问修饰符是针对类( class )来说的,不是对象( object )。
    Malthael
        3
    Malthael  
       2019-01-20 10:30:31 +08:00 via iPhone   ❤️ 1
    因为这个方法写在了 Order 类下,里面的私有变量和方法都可以直接用。
    jerrry
        4
    jerrry  
       2019-01-20 10:32:29 +08:00 via Android   ❤️ 1
    The private modifier specifies that the member can only be accessed in its own class.
    fxxkingduck
        5
    fxxkingduck  
    OP
       2019-01-20 10:38:33 +08:00
    @jerrry @Malthael @hellojinjie @lhx2008 明白了,权限修饰符只是规定了 class 与 class 之间的访问限制,同一个 class 中的不同 object 可以访问该 class 的私有属性的
    fxxkingduck
        6
    fxxkingduck  
    OP
       2019-01-20 10:39:03 +08:00
    rockyou12
        7
    rockyou12  
       2019-01-20 11:01:24 +08:00
    不过这个写法真的不好,除非 Order 类是 final 的不能继承,不然还是用 getter&settter 访问安全些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5170 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:07 · PVG 16:07 · LAX 01:07 · JFK 04:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.