Java abstract class - 实例变量应该是私有的还是受保护的?
Java abstract class - Should the instance variables be private or protected?
实例变量在java抽象class中应该是私有的还是受保护的?
简单的问题。我正在尝试更深入地了解 java 中的抽象概念。
谢谢!
根据经验,选择 non-final 私有变量。如果您的设计要求派生 classes 访问这些变量,请提供访问它们的受保护方法。
使用受保护的变量会在所有 classes 中产生维护责任,无论是否抽象。一旦有人继承了您的抽象 class,您的受保护变量就会暴露,就好像它们是 public 一样。以下是应避免使用此变量的一些原因:
- 继承 classes 可以随意更改您的变量 - 这可能会绕过抽象基 class[=22= 设置的变量验证]
- 继承 classes 变得依赖于变量名称和类型 - 这锁定了您在定义受保护变量时所做的设计选择。
第一条规则不适用于 final 变量,因为它们无法更改,因此该规则对它们进行了例外处理。但是,第二条规则仍然适用,因此您在定义受保护变量时应该小心,即使在它们是最终变量的情况下也是如此。
如果受到保护,则此 class 和任何子 class 都可以访问 属性。如果是私有的,那么只有这个 class 可以访问 属性(它不是继承的)。这取决于您是否需要在任何 subclass.
中访问它们
实例变量在java抽象class中应该是私有的还是受保护的?
简单的问题。我正在尝试更深入地了解 java 中的抽象概念。 谢谢!
根据经验,选择 non-final 私有变量。如果您的设计要求派生 classes 访问这些变量,请提供访问它们的受保护方法。
使用受保护的变量会在所有 classes 中产生维护责任,无论是否抽象。一旦有人继承了您的抽象 class,您的受保护变量就会暴露,就好像它们是 public 一样。以下是应避免使用此变量的一些原因:
- 继承 classes 可以随意更改您的变量 - 这可能会绕过抽象基 class[=22= 设置的变量验证]
- 继承 classes 变得依赖于变量名称和类型 - 这锁定了您在定义受保护变量时所做的设计选择。
第一条规则不适用于 final 变量,因为它们无法更改,因此该规则对它们进行了例外处理。但是,第二条规则仍然适用,因此您在定义受保护变量时应该小心,即使在它们是最终变量的情况下也是如此。
如果受到保护,则此 class 和任何子 class 都可以访问 属性。如果是私有的,那么只有这个 class 可以访问 属性(它不是继承的)。这取决于您是否需要在任何 subclass.
中访问它们