str*_*rry 43 java oop visibility
众所周知,Java遵循面向对象的范式,数据封装说,对象的字段(属性)应该为外部世界隐藏,只能通过方法访问,或者方法是外部类的唯一接口世界.那么为什么有可能将Java中的字段声明为public,这会违反数据封装范例呢?
duf*_*ymo 74
我认为这是可能的,因为每个规则都有其例外,在某些情况下可以覆盖每个最佳实践.
例如,我经常将公共静态最终数据成员公开为公共(例如,常量).我不认为这有害.
我要指出,除了Java之外,其他语言中也存在这种情况:C++,C#等.
语言不一定总能保护我们自己.
在Oli的例子中,如果我这样写它会有什么危害?
public class Point {
public final int x;
public final int y;
public Point(int p, int q) {
this.x = p;
this.y = q;
}
}
Run Code Online (Sandbox Code Playgroud)
它是不可变的和线程安全的.数据成员可能是公开的,但你不能伤害他们.
此外,这是一个肮脏的小秘密,"私人"在Java中并不是真正私密的.你总是可以用反射来绕过它.
所以放松一下 也不是那么坏.
Oli*_*rth 52
为了灵活性.如果我不能写,那将是一个巨大的痛苦:
class Point {
public int x;
public int y;
}
Run Code Online (Sandbox Code Playgroud)
将这隐藏在吸气剂和制定者背后,有一点宝贵的好处.
Hot*_*cks 12
因为僵化的"数据封装"不是唯一的范例,也不是面向对象的强制性特征.
而且,更重要的是,如果一个数据属性具有公共setter方法和公共getter方法,并且这些方法除了实际设置/获取属性之外什么都不做,那么将它保密是什么意思呢?
并非所有类都遵循封装范例(例如工厂类).对我来说,这增加了灵活性.无论如何,程序员而不是语言的责任是适当的范围.
| 归档时间: |
|
| 查看次数: |
9565 次 |
| 最近记录: |