0

別の具象クラスから派生した抽象クラスがあります。私の抽象クラスには、同じ抽象クラスのメソッドで呼び出されるプロパティがあります。このプロパティは Abstract クラスでは空ですが、派生クラスでは値を設定します。それにもかかわらず、コンパイラがメソッドを起動すると、派生クラスのオブジェクトでこのメソッドを起動していることに関係なく、抽象クラスの変数がかかります。null の代わりに実際の URL var を取得するにはどうすればよいですか?

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";
}
4

2 に答える 2

4

フィールドは多態的ではありません。ポリモーフィックな動作が必要な場合は、メソッドが必要です。

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

AbstractHTTPFactoryまたは、コンストラクターに提供されるフィールドを持つ可能性があります。

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");
    }
}
于 2012-04-12T13:11:25.673 に答える