2010-04-06 52 views

回答

0

制作一个变量私有被称为information hidingencapsulation。引入这个概念是为了将程序逻辑与程序实现分开。

拥有变量public或变量private与公共getter和setter是不一样的,即使是getter和setter也不会对变量进行任何转换。如果这是set或者它是get,就像缓存或约束检查一样,Getter和setter会对变量进行某种操作。

一个公共getter或setter可以被覆盖在一个子类中,专门化它的行为。你不能对公共变量做同样的事情。即使使用属性,行为也不一样,因为您无法覆盖子类中的访问器。写入(空)访问器为您提供了更多的扩展可能性。

请注意,这个概念并不是由所有语言实现的,例如C和Python他们没有实现。

5

那么,他们确实有一个默认值。

你应该问自己的问题是,为什么不是一切公开的,一旦你明白了 - 我相信你可以回答你自己的问题。

0

如果您是唯一使用此代码的人 - 请全部公开。如果不是 - 你应该使用私人领域,如果你不想让别人改变它,因为这可能会破坏你的设计,你的课堂行为将是不可预知的。都需要内部逻辑只

  • 上设置新值的可能的核查

  • 0
    1. 一些变量。如果你不需要它知道,也许你会需要它后来
    1

    你是非常正确的,最好是有可变private,并有public的getter/setter。直接访问public的字段实际上是bad practice

    这与所谓的“表示独立性”有关:如果通过getter/setter进行外部访问,则可以更改对象的内部表示,而不会出现重大故障。

    1

    事实是,如果字段被迫在语言中是私人的,那么不会有很多东西会丢失。在大多数语言中,就像你说的那样,建议使用属性setter/getter来封装所有的字段。一种语言可以相当合理地强制所有字段都是私有的。

    但是,如果您有类似的私人内部类:

    public class OuterClass 
    { 
        private InnerClass 
        { 
          public int publicField; 
        } 
    } 
    

    那么你可能会说,干将/不需要setter方法。在这种情况下,在C#中,使用自动实现的属性同样简单。然而,这些只是在C#2中引入的,所以我猜这就是公有字段仍然被允许的原因。预先自动实现的属性,人们不得不编写getter/setter,这可能被认为是私人内部类的矫枉过正。

    在具有指针的语言(如C++)中,如果希望从类外部获取指向字段的指针,则需要公共字段。

    0

    对于程序员来说,通常的反射就是将类中的所有字段设置为私有*,并提供由一系列获取器和设置器组成的接口来操作它们。这是根据封装原则,其中一个类的内部工作保持隐藏,并允许程序员说明可能发生什么变化。

    某些情况下需要public,protected和default(= none)访问说明符。公共可用于任何方法或领域,应该可以从课堂外自由访问,而缺少说明符则限制对类本身和同一包中的任何类的访问。最后,当需要从包中的子类和其他类访问字段时,可以使用protected,这是框架中有时使用的一种方法。

    这里显示的访问符之间的差异的联系:由于
    http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

    *随着容器对象除外检索一个实例为您提供了完全控制。

    相关问题