强制子类在java中设置一个variables

我正在开发Android,并有一个相对简单的情况,我正试图以最好的方式实现。

简单地说,我有一个类定义给定屏幕的所有基本参数。 从这里,应用程序中的每个屏幕都是这个的一个子类。 我需要每个屏幕(即子类)在其实现中设置variables的值(即每个屏幕必须定义它在导航树中的级别)。

此外,理想情况下,这个variables应该是final当它被设置在子类(我意识到这可能是不可能的)。

什么是最好的方式去做这件事? 有没有办法在Java中正确执行这种行为?

Solutions Collecting From Web of "强制子类在java中设置一个variables"

@ pst的评论导致这个解决scheme。

这不能用一个variables来完成。 但是抽象类可以要求实现一个特定的方法:这个方法可以返回适用的值

从声明abstract函数来设置或返回variables,可以强制任何子类正确实现它。

接下来,该函数必须由外部类的每个子类调用。 这意味着它必须在外部阶层的某个地方完成。 这可以在外层类的无参构造函数中完成,而不必担心子类调用super

注意:如果构造函数没有显式地调用超类构造函数,那么Java编译器会自动插入对超类的无参构造函数的调用。 如果超类没有没有参数的构造函数,你会得到一个编译时错误。 对象确实有这样的构造函数,所以如果Object是唯一的超类,没有问题。 (Java文档:超级)

在此基础上,只要满足以下任一条件,该解决scheme将会保持正确的强制variables设置:

  1. 在超类中没有创build其他的构造函数(因此super不能用于子类来调用不同的构造函数)
  2. 超类中的所有其他构造函数仍在内部调用默认的构造函数

代码:

超类:

 public abstract class SuperClass { // Variable all inner classes must set static int myVar = 0; public SuperClass() { myVar = giveValue(); } public abstract int giveValue(); } 

子类:

 public class SubClass extends SuperClass { @Override public int giveValue() { return 5; // individual value for the subclass } } 

而不是强制子类初始化字段,你可以通过让你的类的构造函数采取一个参数实现一个接口,提供你想要初始化的字段来遵循构造的策略。