Java重写继承的字符串

时间:2012-04-12 13:08:29

标签: java

我有一个Abstract类,它是由另一个Concrete类派生的。在我的抽象类中,我有一个属性,它在同一个Abstract类的方法中调用。在Abstract类中此属性为空,但在派生中我为其设置了一个值。然而,当编译器启动方法时,它采用抽象类'变量,而不是关于我在派生类的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";
}

2 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分:0)

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