在静态父方法中访问子类常量
是否可以从父类中的静态方法内访问子类类常量?在静态父方法中访问子类常量
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();
试试吧!
如果常数被声明为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;
}
Foo
在Parent
定义,因此不能访问的Child
私有成员。
这个怎么样?
class Parent {
abstract String getModelName();
public void someMethod() {
String myModel = getModelName();
}
}
class Child extend Parent {
String getModelName() { return "events"; }
}
但请注意,该方法不再公开。
我已更新示例 – jonepatr 2012-01-07 02:31:46
方法名**必须**以小写字母开头。 – 2012-01-07 02:42:59
@rogelware说谁? – 2012-01-07 02:44:58
你可能会发现这更有效。
使用方法getName定义父类。请注意,如果您希望模型类公开名称属性,则此属性可以是公共的,否则,您可以将其保留为“受保护”,如我在这里。 “受保护”将使该方法在任何派生(子)类中都可见。
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;
}
}
这编译和运行我怀疑你正试图acheive的方式。 。 。
编辑:哦。现在我看到了问题。错过了你需要从静态方法中引用它。 。 。
上面的错误答案。我错过了你需要从父类的静态方法访问它的事实。我的错 。 。 。 – XIVSolutions 2012-01-07 03:34:26
举个例子。我对任何需要了解其孩子的家长保持警惕;问我的父亲。 – 2012-01-07 02:26:00
在发布了我的答案后,我必须说我也同意戴夫牛顿。如果你的父类需要知道它是孩子,你可能有一个设计问题需要考虑(但并非总是......) – XIVSolutions 2012-01-07 03:26:40
你能提出一个这不是设计问题的情况吗? – 2012-01-07 03:36:07