Java 抽象类 - 实例变量应该是私有的还是受保护的?

Man*_*eyo 5 java abstract

java抽象类中的实例变量应该是私有的还是受保护的?

简单的问题。我试图更深入地了解java中的抽象概念。谢谢!

das*_*ght 3

根据经验,选择非最终私有变量。如果您的设计要求让派生类访问这些变量,请提供受保护的方法来访问它们。

使用受保护的变量会在所有类(无论是否抽象)中产生维护责任。一旦有人继承了您的抽象类,您的受保护变量就会像公共变量一样公开。以下是应避免此变量的一些原因:

  • 继承类可以随意更改变量- 这可能会绕过抽象基类设置的变量验证
  • 继承类变得依赖于变量名称和类型- 这会锁定您在定义受保护变量时所做的设计选择。

第一条规则不适用于最终变量,因为它们无法更改,因此该规则对它们进行了例外处理。不过,第二条规则仍然适用,因此您在定义受保护变量时应该小心,即使在它们是最终变量的情况下也是如此。