2012-04-12 9 views
0

私は別のコンクリートクラスから派生した抽象クラスを持っています。私の抽象クラスでは、同じ抽象クラスのメソッドで呼び出されるプロパティを持っています。このプロパティはAbstractクラスでは空ですが、派生クラスでは値を設定します。それにもかかわらず、コンパイラがこのメソッドを起動するとき、抽象クラスの変数を取りますが、派生クラスのObjectに対してこのメ​​ソッドを起動しているのではなく、 nullの代わりに実際のURL varを取得するにはどうすればよいですか?Javaは継承した文字列をオーバーライドします

abstract public class AbstractHTTPFactory { 
    protected String URL = null; 

    final public ArrayList<? extends LGCookObject> make() throws HTTPFactoryException{ 
     try { 
      String response = sr.getData(URL); 
      } 
    } 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory{ 
    protected String URL = "VALUE"; 
} 
+0

srgetData()とは何ですか? –

+0

どのようにプロパティを呼びますか? – pcalcao

+0

http://stackoverflow.com/questions/685300/is-there-a-way-to-override-class-variables-in-java –

答えて

4

フィールドは多型ではありません。

public abstract class AbstractHTTPFactory { 
    private final String url; 

    public final ArrayList<? extends LGCookObject> make() 
      throws HTTPFactoryException { 
     String response = sr.getData(url); 
     ... 
    } 

    protected AbstractHTTPFactory(String url) { 
     this.url = url; 
    } 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory { 
    public RecipesHTTPFactory() { 
     super("VALUE"); 
    } 
} 
0

あなたが本当に残したい場合は:あなたは、コンストラクタに供給されるAbstractHTTPFactoryのフィールドを持つことができ

public abstract class AbstractHTTPFactory { 
    public final ArrayList<? extends LGCookObject> make() 
      throws HTTPFactoryException { 
     String response = sr.getData(getURL()); 
     ... 
    } 

    protected abstract String getURL(); 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory { 
    protected String getURL() { 
     return "VALUE"; 
    } 
} 

または潜在的:あなたはポリモーフィック行動をしたい場合は、方法が必要になりますあなたの抽象基本クラスのURL定義は、基底クラスを隠す同じ名前の変数を再定義するのではなく、派生した具象クラスの値を設定します。派生クラスに不思議な変数が現れるので、これは良い方法ではありません。

関連する問題