可能是一个非常基本的java问题。
我有一个抽象类,简化它:
public abstract class A{
private String value = "A" ; // I want it undeclared, but set it for testing purpouse
public String getValue(){
return value ;
}
}
然后我有一个扩展它的类:
public abstract class B{
private String value = "B" ;
}
所以我遇到的问题是,当通过类 A 创建 B 的实例并调用 getValue() 时,它总是返回“A”:
A b = new B();
b.getValue(); // returns "A"
如何让 B 使用他自己的属性调用超级方法而无需复制代码?A 它目前太长了,它被扩展到许多不同的类,它们的不同之处仅在于它的属性值,并且它们都使用与超类相同的方法。
谢谢!
编辑:
对不起,我没有那么具体。我有很多属性,以及一些处理这些属性的方法。扩展类更改了这些属性,但我想将超级方法与扩展类实例对象一起使用,而不必两次声明它们。如果有帮助,我正在使用 servlet 上下文属性。
配置文件
public abstract class Config {
private String someValue1 ;
...
private String someValuen ;
public void export(ServletContext cxt){
cxt.setAttribute("someValue1", someValue1);
...
cxt.setAttribute("someValuen", someValuen);
}
}
SomeConfig.java
public class SomeConfig {
private String someValue1 = "something" ;
...
private String someValuen = "something else" ;
}
SomeServlet.java
ServletContext cxt = getServletContext() ;
Config config = new SomeConfig();
config.export(cxt);
为了清楚起见,属性都有不同的名称。我将它们从 jsp 中用作: ${someValuen}