是否可以从父类的静态方法中访问子类常量?
public class Model {
public static void someMethod(){
HERE I WANT TO GET THE MODEL_NAME constant!
}
}
public class EventModel extends Model {
public static final String MODEL_NAME = "events";
}
在我打电话的其他地方:
EventModel.someMethod();
答案 0 :(得分:3)
试试吧!
如果常量被声明为private
,那么没有。如果是public
,则是,因为任何人都可以访问它。父类在这里基本上是无关紧要的。
class Parent {
public static void Foo() {
int x = Child.YEP; // Ok
int y = Child.NOPE; // Error
}
}
class Child extends Parent {
public static final int YEP = 42;
private static final int NOPE = 66;
}
{p> Foo
在Parent
中定义,因此无法访问Child
的私人成员。
这个怎么样?
class Parent {
abstract String getModelName();
public void someMethod() {
String myModel = getModelName();
}
}
class Child extend Parent {
String getModelName() { return "events"; }
}
但请注意,该方法不再公开。
答案 1 :(得分:1)
您可能会发现这更有效。
使用getName方法定义父类。请注意,如果您希望模型类公开Name属性,则可以是公共的,否则,您可以将其保留为" protected"就像我在这里一样。 "受保护的"将保持方法在此类和任何派生(子)类中可见。
public class Model {
private static String MODEL_NAME = "Model";
protected String getModelName(){
return MODEL_NAME;
}
}
然后定义"覆盖"对于您的子类的名称方法:
public class EventModel extends Model
{
private static String MODEL_NAME = "events";
@Override // Tells the compiler that this method OVERRIDES the parent method
public String getModelName(){
return MODEL_NAME;
}
}
这会编译并运行我怀疑你试图实现的方式。 。
编辑:噢。现在我看到了问题。错过了你需要从静态方法引用它。 。 。