2015-03-31 42 views
0

我知道子类除了拥有超级类的公共setter/getter之外,不能访问私有领域。至今我还没有任何面向对象语言的经验。我是否应该将所有字段设置为私有的,并且只需使用公共方法在子类中访问它们,或者让它们受到保护并在子类和包中自由使用?Java对私有领域的影响

+0

getter/setter访问在Java中更传统。使对象尽可能少变化也是非常好的做法。经过一年的经验,你会明白为什么。 – 2015-03-31 20:29:01

+0

好吧,让所有的东西都是私人的,甚至在自己的孩子分类器中使用setter getters是一种社会上可以接受的方式? – KrwawyKefir 2015-03-31 20:56:24

+0

如果您制作实用的软件包,当然不需要这么做,但要确保所有这些字段都隐藏在包装以外的直接访问中。 “到处吸收/设置者”更多地是关于JPA,EJB和其他企业内容。 – 2015-03-31 21:05:33

回答

1

使它们成为protected。这是此关键字存在的唯一目的!

+0

不是。这取决于OP是否在意泄漏内部状态。 – 2015-03-31 20:33:00

0

子类不继承其父类的私有成员。但是,如果超类具有访问其专用字段的公共或受保护方法,那么这些也可以由子类使用。

嵌套类可以访问其包含的所有私有成员 类 - 这两个字段和方法。因此,由子类继承的公共或受保护的嵌套类可间接访问超类的所有私有成员。

See the Java Tutorial

+0

@chancea看看他谈论继承的标题 – 2015-03-31 20:26:00

+0

这不是一个答案。 OP正在问一个设计问题,而不是围绕范围的规则。 – 2015-03-31 20:33:53

1

OOP还有一个特点encapsulationencapsulation强烈建议我们隐藏从外部世界中的数据。而且你可以通过将字段/属性/变量隐藏来隐藏数据。

并且对于访问私有变量使用一些公开的getter方法。

1

这取决于您的需求。如果您需要访问子类以及相同的包,请将其设为protected

下面是一般规则:

private:只有一流的访问。

protected:包访问和派生类。

default:仅限于相同的包装。

public:任何人都可以访问它。