Vererbung vererbungsproblem

H2SO3-

Bekanntes Mitglied
Hi,

ich habe folgendes kleines Problem

Ich habe 2 config Objects von denen eins vom anderen erbt.

Java:
public class CxConfig {

	HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();
	
	public void addValue(Integer key, String value){
		myHashMap.put(key, value);
	}
	
	public String getValue(Integer key){
		return myHashMap.get(key);
	}
	
	public String getModiValue(Integer key){
		String modiValue = getValue(key);  //#1
		return modiValue + "_modi";
	}
}

und

Java:
public class OConfig extends CxConfig{

	public void addValue(Integer key, String value){
		super.addValue((key - 1), value);
	}
	
	public String getValue(Integer key){
		return super.getValue((key - 1));
	}
	
	public String getModiValue(Integer key){
		return super.getModiValue((key - 1));
	}
}

diese ergeben sich aus der geschichtlichen Entwicklung des codes.

Nun ein Beispiel wie es genutzt werden kann:

Java:
	public static void main(String[] args) {
		OConfig oc = new OConfig();
		oc.addValue(1, "value one");
		oc.addValue(2, "value two");
		
		String value = oc.getModiValue(2);
		System.out.println(value);
	}

Da ich ja bei getModiValue die 2 mit reinnehme erwarte ich natürlich das ich "value two_modi" bekomme. Leider bekomme ich "value one_modi".

Dies kommt daher das bei #1 halt nicht die methode aus CxConfig sondern aus OConfig genommen wird. Daher wird von der ursprünglich mitgegebenen 2 zwei mal -1 gerechnet. Eigentlich darf es ja nur einmal -1 sein.

Nun endlich due Frage.
Wie kann ich bei #1 die methode getValue(key); dazu bringen nicht erst in oConfig zu springen sondern in CxConfig zu bleiben. Habe es schon mit this.getValue(key); probiert aber das klappt auch nicht.
(In getValue(key); ) passiert eigentlich noch ein bischen mehr als nur den Wert zu geben weshalb ich schon die methode benutzen möchte)

Hoffe jemand kennt eine super.Loesung :)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
getModiValue() nicht zu überschreiben würde im Moment reichen mit dann überschriebener getValue()? ;)

ansonsten kann man das natürlich trennen in interne Methode, + externe zu überschreibende,
oder gar direkt myHashMap.get(key);

eine überschriebene Methode kann man aber nicht normal aufgerufen werden, richtig,
da ist die Vererbung unerbitterlich, selbst für die betroffene Klasse selber
 

H2SO3-

Bekanntes Mitglied
getModiValue zu löschen ist leider keine option. Da sie public ist wird sie bereits von anderem code benutzt und es ist ja auch keine 100% übernahme da ja vom wert noch -1 gerechnet wird.

Bleibt mir wohl keine andere Möglichkeit als eine art
private String getValueNew(int key) zu schreiben. Blöd hatte gehoft ich könnte java irgendwie dazu bringen. Schade.
 
S

SlaterB

Gast
wer spricht vom Löschen? in der Unterklasse zu löschen kann keinen Code der Welt stören, ist in der Oberklasse ja noch vorhanden
 

H2SO3-

Bekanntes Mitglied
ne brauche die methode halt in beiden varianten. In Zukunft soll halt je nach anwendungsfall das eine oder das andere config object benutzt werden.
 

faetzminator

Gesperrter Benutzer
Du hast uns wohl nicht ganz verstanden. Wenn du in der abgeleiteten Klasse diese Methode rauswirfst, hast du deinen gewünschten Output. Du musst nur die beiden Methoden zum lesen und schreiben überschreiben, da alle anderen (in diesem Fall die zu löschende Methode) diese verwenden.
 

faetzminator

Gesperrter Benutzer
Und was ist das Resultat davon? Dass man unverändert die super-Methode aufruft - was sinnlos ist. Also einfach die Methode löschen.
 

Ähnliche Java Themen


Oben