Java 抽象类 - 实例变量应该是私有(private)的还是 protected ?

标签 java abstract

java抽象类中的实例变量应该是private还是protected?

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

最佳答案

根据经验,选择非 final 私有(private)变量。如果您的设计要求让派生类访问这些变量,请提供 protected 方法来访问它们。

使用 protected 变量会在所有类中产生维护责任,无论是否抽象。一旦有人从您的抽象类继承,您的 protected 变量就会暴露出来,就好像它们是公开的一样。以下是应避免使用此变量的一些原因:

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

第一条规则不适用于 final 变量,因为它们无法更改,因此该规则为它们设置了一个异常(exception)。不过,第二条规则仍然适用,因此您在定义 protected 变量时应该小心,即使在它们是最终变量的情况下也是如此。

关于Java 抽象类 - 实例变量应该是私有(private)的还是 protected ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215130/

相关文章:

java - 构造函数中的附加类型界限

java - 使用 iptables 重定向端口时,Hibernate 无法打开连接

c# - 抽象类引用实现类

c++ - 体系结构 x86_64 的 undefined symbol - 编译继承类

C#抽象类有另一个抽象类对象

java - 无法使用 jshell 启动 Spring Boot 应用程序

Java将原始字节编码为图像简单图像格式/文件

java - 使用java上传文件到S3

c# - 接口(interface)和抽象类中的 Xml 属性

java - 使用抽象方法时定义的 var 为 null