我有一个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";
}
答案 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。这不是一个好习惯,因为派生类中会出现神秘的变量。