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

2019-01-20 10:17:23 +08:00
 fxxkingduck

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


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

1135 次点击
所在节点    问与答
7 条回复
lhx2008
2019-01-20 10:30:09 +08:00
private 是 “类私有”,而不是对象私有,所以同类对象之间是可以互相访问私有变量的,但是正确的做法显然是尊重封装,使用公有方法。
hellojinjie
2019-01-20 10:30:26 +08:00
private public protected 访问修饰符是针对类( class )来说的,不是对象( object )。
Malthael
2019-01-20 10:30:31 +08:00
因为这个方法写在了 Order 类下,里面的私有变量和方法都可以直接用。
jerrry
2019-01-20 10:32:29 +08:00
The private modifier specifies that the member can only be accessed in its own class.
fxxkingduck
2019-01-20 10:38:33 +08:00
@jerrry @Malthael @hellojinjie @lhx2008 明白了,权限修饰符只是规定了 class 与 class 之间的访问限制,同一个 class 中的不同 object 可以访问该 class 的私有属性的
fxxkingduck
2019-01-20 10:39:03 +08:00
rockyou12
2019-01-20 11:01:24 +08:00
不过这个写法真的不好,除非 Order 类是 final 的不能继承,不然还是用 getter&settter 访问安全些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/528742

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX