在Java中的继承方面受保护与公共

Protected vs Public in terms of Inheritance in Java

本问题已经有最佳答案,请猛点这里访问。

当在创建超类时使用Java中的受保护的对象时,如果程序在受保护的访问修饰符集没有任何问题的情况下运行,那么有必要将其更改为公共的吗?


你应该遵循特权最小的原则。

这意味着应该为成员分配程序工作所需的最低可访问性。

如果一个不相关的类需要访问,则使它成为public。通常只对提供对数据的托管访问的方法执行此操作。

如果要完全信任子类来操作数据,并且它需要它正常工作,那么可以使成员protected

否则,将其设置为private,这样其他类就无法访问它(不需要通过其他更易于访问的方法来帮助封装数据)。

如果你的程序在protected的时候运行得很好,那么不要把它设为public。考虑使用访问它的protected方法使它成为private,以便更好地封装数据。


回想一下那些访问修饰符正在做什么。

public字段是任何使用该类的类都可以修改的字段。

protected字段是类、其子类以及同一包中的类可以访问的字段。

更改这些字段的可见性所涉及的风险更大,这取决于数据封装的内容。我强烈反对这种声明。


仅当您希望变量或方法被超类的子类访问或重写,但不希望该变量或方法在超类或子类(即公开)之外被访问时,才在超类中使用protected。

当您希望任何类访问您的变量或方法时,请使用public。注意,您应该很少有公共的非最终变量或公共可变变量。

if a program runs without any problems with a Protected access
modifier set is there any need to change it to Public?

不,对变量和方法使用最不可访问的访问修饰符。因此,如果它们不被要求作为公共的,不要将它们公开,只有在它们需要被保护时才使它们受到保护(即子类要求)。否则就要保密。

为了后面的推理,请参见Joshua Bloch中的"项目13:最小化类和成员的可访问性":HTTP//UET.VNU.EUU.VN/~CHOTMT/E-Booo/Java/Actuv.java2n.Edith.May.2008。