java - 声明子类中需要存在的字段的正确方法?

标签 java oop

假设我有一个类 Animal,然后是一堆扩展 Animal 的子类。假设我想要一个名为 name 的公共(public)字段,它也应该存在于每个子类中。在每个子类中包含和初始化该字段的正确方法是什么?

1) 将父类中的字段声明为protected,然后在每个子类中对其进行初始化。如果我这样做,将该字段称为 super.variable 还是简单地称为 variable 是否合适?就我个人而言,使用 super 可以更明显地看出该字段是在父级中声明的。 (这是我目前正在做的)

2) 声明parent中的字段为private,然后创建getterssetters来访问该字段

3) 只需在每个子类中声明并初始化相同的变量

4) 我缺少的另一种方法?

感谢您的帮助。我知道这个问题很基础,但我很好奇最合适的风格是什么。

编辑:

我不确定你们是否会看到这个,但这是一个后续问题。

有没有什么好的方法可以保证子类初始化字段?

最佳答案

答案取决于您是否需要控制对该字段的访问以确保正确性(例如,以确保其他一些字段同时得到更新)。如果子类可以直接转动该字段,那么只需使用 protected。如果您需要在设置该字段时执行额外的检查或操作,您应该将其设置为 private 给父类(super class),并让子类使用 setter 来确保您的逻辑运行。如果您知道总是需要该字段,则不应复制该字段;如果您不确定,那么您应该考虑使用 interface Animal 并将字段放在 AbstractAnimal implements Animal 上。

在 Java 中,super 除了调用父类(super class)的方法之外,不用于任何其他用途。直接访问protected字段;这就是它们的用途,如果您需要知道,您的开发环境将跟踪它们的声明位置。

关于java - 声明子类中需要存在的字段的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18006786/

相关文章:

java - 使用 java 在 .doc 中添加图像和编辑标题

javascript - JS 继承示例 : too much recursion

java - IntelliJ IDEA Gradle 项目无法识别/定位 Antlr 生成的源

java - 如何访问 jar 中的配置文件?

delphi - 当一个类已经扩展了一个类和一个接口(interface)时如何继承另一个类

python 类只读属性(在日期时间)

javascript - 数千个对象会损害性能吗

Java 的 toString() 静态或非静态(基于我的示例)

java - 家庭作业 Java 网络编程

java - 软件首次运行时如何从java代码创建MySQL程序(设置数据库程序))