PHP&;Java:正在设置属性';它的可见性是私有的,并通过派生类overkill的getter访问它?

PHP&;Java:正在设置属性';它的可见性是私有的,并通过派生类overkill的getter访问它?,java,php,inheritance,private-members,Java,Php,Inheritance,Private Members,那你觉得呢 我的Java讲师说,属性应该总是声明为私有的,没有理由以任何其他方式进行。我立刻开始思考继承,它将如何影响它。您的意思是将字段声明为私有吗?如果是这样的话,我同意你的演讲者,尽管“没有理由”可能有点过分。有时会有使用非私有字段的原因,例如在私有嵌套类中 但是,是的,在一个简单的超类/子类关系中,我将使用getter/setter,而不是使字段受到保护。它将实现与类公开的API分离,甚至与它的子类分离。Private会阻止扩展原始类的类直接访问它。一般来说,如果您希望扩展原始类并希望继

那你觉得呢

我的Java讲师说,属性应该总是声明为私有的,没有理由以任何其他方式进行。我立刻开始思考继承,它将如何影响它。

您的意思是将字段声明为私有吗?如果是这样的话,我同意你的演讲者,尽管“没有理由”可能有点过分。有时会有使用非私有字段的原因,例如在私有嵌套类中


但是,是的,在一个简单的超类/子类关系中,我将使用getter/setter,而不是使字段受到保护。它将实现与类公开的API分离,甚至与它的子类分离。

Private会阻止扩展原始类的类直接访问它。一般来说,如果您希望扩展原始类并希望继承类能够直接修改特定的类成员,那么protected是声明变量的更好方法。

在私有嵌套类中使用非私有字段的原因是什么?嵌套类的私有字段无论如何都可以在包含类的最顶层访问。@Sergey:在Java中是这样的,是的-我被C#弄糊涂了,C#做的事情正好相反。尽管即使在Java中,你最终也会得到额外的合成方法而没有任何好处……我不明白,当你从Java中的包含类访问私有静态嵌套类的私有字段时,你最终会得到额外的合成方法而没有任何好处。@Sergey:它们可以在Java语言中访问,但不能在JVM中访问(没有内部类的概念)。尝试一下,然后用javap-c反编译生成的代码。至于Java,今天的情况就是这样。不过,它重复的问题包含了很多有用的信息。字段应该是私有的,getter和setter可以根据用例进行保护或公开。参见Jon Skeet的回答…@Guillaume,甚至private如果getter和setter做的不仅仅是get或set,那么它们可能会很有用。或者如果它们将来可能需要做更多的事情。@Sergey:我必须同意你的看法。是的,任何可见性都可以在getter/setter上使用。。。