0

我有一个抽象类,它是由另一个具体类派生的。在我的抽象类中,我有一个在同一个抽象类的方法中调用的属性。此属性在抽象类中为空,但在派生中我为其设置了一个值。然而,当编译器启动该方法时,它需要抽象类的变量,而不是我在派生类的 Object 上启动此方法。如何获取实际的 URL var 而不是 null ?

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 回答
0

如果您真的想在抽象基类中保留 URL 定义,请在派生的具体类中设置它的值,而不是重新定义一个具有相同名称的变量,这将隐藏基类之一。这不是一个好习惯,因为派生类中会出现神秘的变量。

于 2012-04-12T13:55:01.987 回答