2012-01-07 15 views
1

親クラスの静的メソッド内から子クラス定数にアクセスできますか?静的親メソッドのサブクラス定数にアクセス

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

例を挙げてください。私は子供について知る必要のある親を気にしています。私のお父さんに尋ねる。 –

+0

私の答えは以下のとおりですが、私もDave Newtonに同意しなければなりません。あなたの親クラスがその子供について知っておく必要がある場合は、考慮すべき設計上の問題があるかもしれません。(常にそうとは限りません) – XIVSolutions

+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; 
} 

FooParentで定義されているので、Childのプライベートメンバーにアクセスすることはできません。

これはいかがですか?

class Parent { 
    abstract String getModelName(); 

    public void someMethod() { 
     String myModel = getModelName(); 
    } 
} 

class Child extend Parent { 
    String getModelName() { return "events"; } 
} 

ただし、このメソッドは公開されていません。

+0

例を更新しました – jonepatr

+0

メソッド名**は小文字で始める必要があります**。 –

+0

@rogelware誰に言いますか? –

1

もっと効果的でしょう。

getNameメソッドを使用して親クラスを定義します。モデルクラスでNameプロパティが公開されるようにするには、これを公開することができます。それ以外の場合は、ここでのように「保護された」状態にすることができます。 "Protected"は、このクラスおよび派生(子)クラス内でメソッドを可視に保ちます。

public class Model { 
    private static String MODEL_NAME = "Model"; 

    protected String getModelName(){ 
     return MODEL_NAME; 
    }  
} 

その後、あなたの子クラスの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しようとしている疑いがある道をコンパイルし、実行します。 。 。

EDIT:Oooh。今私は問題を見る。あなたが静的な方法からそれを参照する必要があることを逃した。 。 。

+0

上記の答えは正しくありません。私はあなたが親の静的メソッドからこれにアクセスする必要があったという事実を忘れていました。私の悪い。 。 。 – XIVSolutions

関連する問題