我有几个这样的课程:
public class A {
private String foo;
public A(String f) {
foo = f; // I want foo to be final based on the subclass instance
}
}
public class B extends A {
private static final String FOO = "foo1";
public B() {
super(FOO);
}
}
public class C extends A {
private static final String = "foo2";
public C() {
super(FOO);
}
}
我想要的是当我在B
类型上创建对象时,我不希望String
中的A
可以更改。 foo = f
只是指定了引用,但我希望foo
成为同一个最终对象FOO
。我怎么能这样做?
答案 0 :(得分:2)
看起来你根本不想要一个字段,而是你可以有一个方法。
interface A {
String foo(); // the implementation depends on the sub-class.
}
class B implements A {
public String foo() { return "foo1"; }
}
class C implements A {
public String foo() { return "foo2"; }
}
答案 1 :(得分:0)
这可能不是最好的设计,但你想要做的是初始化一个最终的字符串。
public class A {
private final String foo;
public A(String f) {
foo = f;
}
}
最终变量只能初始化一次,因此您可以在构造函数中初始化它。但是在你的情况下没有意义,因为你的子类无法访问foo
,因为它是私有的。有关所有可用的Java可见性修饰符,请参阅here。