在静态父方法中访问子类常量

时间:2012-01-07 02:24:12

标签: java oop inheritance static

是否可以从父类的静态方法中访问子类常量?

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();

2 个答案:

答案 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> FooParent中定义,因此无法访问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;
    }
}

这会编译并运行我怀疑你试图实现的方式。 。

编辑:噢。现在我看到了问题。错过了你需要从静态方法引用它。 。 。