【发布时间】:2015-05-16 13:09:09
【问题描述】:
在创建超类时应该在 Java 中何时使用 Public 而不是 Protected,如果程序运行时使用 Protected 访问修饰符集没有任何问题,是否需要将其更改为 Public?
【问题讨论】:
标签: java
在创建超类时应该在 Java 中何时使用 Public 而不是 Protected,如果程序运行时使用 Protected 访问修饰符集没有任何问题,是否需要将其更改为 Public?
【问题讨论】:
标签: java
您应该关注Principle of Least Privilege。
这意味着应为成员分配程序运行所需的最低可访问性。
如果不相关的类需要访问,请将其设为public。通常,这仅适用于提供对数据的托管访问的方法。
如果要完全信任子类来操作数据,并且需要它正常工作,则可以将成员设为protected。
否则,将其设为private,因此没有其他类可以访问它(无需通过其他更易于访问的方法来帮助封装数据)。
如果你的程序在protected 时运行良好,那么不要让它成为public。考虑将其设为private,并使用访问它的protected 方法,以更好地封装数据。
【讨论】:
回忆一下那些访问修饰符在做什么。
public 字段是任何使用此类的类都可以修改的字段。
protected 字段是类、其子类以及同一包中的类可以访问的字段。
更改这些字段的可见性涉及更大的风险,具体取决于您的数据所封装的内容。我强烈反对这种声明。
【讨论】:
仅当您希望您的变量或方法被该超类的子类访问或覆盖但您不希望该变量或方法在超类或子类之外(即公开)访问时,才在超类中使用protected。
当您希望任何类都可以访问您的变量或方法时,请使用 public。请注意,您应该很少有公共的非最终变量或公共可变变量。
如果程序在受保护的访问权限下运行时没有任何问题 modifier set 有必要改成Public吗?
不,对变量和方法使用最不易于访问的访问修饰符。因此,如果它们不需要公开,请不要将它们公开,并且仅在需要保护它们时才使它们受保护(即子类需要)。否则将它们设为私有。
有关这背后的原因,请参阅 Joshua Bloch 撰写的 Effective Java 中的“第 13 项:最小化类和成员的可访问性”部分:http://uet.vnu.edu.vn/~chauttm/e-books/java/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf
【讨论】: