おそらく非常に基本的な 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 を取得するにはどうすればよいですか? 現在は長すぎます。プロパティ値のみが異なる多くの異なるクラスに拡張され、それらはすべてスーパークラスと同じメソッドを使用します。
ありがとう!
編集:
申し訳ありませんが、私はそれほど具体的ではありませんでした。私は多くのプロパティと、それらのプロパティを処理するいくつかのメソッドを持っています。拡張クラスはこれらのプロパティを変更しますが、それらを 2 回宣言することなく、拡張クラスのインスタンス化されたオブジェクトでスーパー メソッドを使用したいと考えています。それが役立つ場合は、サーブレットのコンテキスト属性を使用しています。
Config.java
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}