Mir spukt gerade folgende Frage im Kopf rum, ist momentan eher theorethische Natur, weil ich das Problem vermeiden will. Aber interessieren würde mich es dennoch mal.
Gegeben seien von einem Interface A zwei Versionen. (Die eine älter, die eine neue) sowie zwei davon abgeleitete Klassen.
Klasse B1 wurde mit der Version 1 kompiliert, Klasse B2 mit der Version 2.
Wann kracht es, wenn ich sowohl ein Objekt von B1 und B2 anlege? Sofort beim laden der Klasse B1? Oder erst wenn ich auf einem Objekt der Klasse B1 die Methode doSomeOtherThing() versuche aufzurufen?
Hintergrund der ganzen Geschichte ist der, dass ich für mein Programm eine Art Plugin Struktur haben will für Computergegner. Dabei kann es sein, dass sich das zu implementierende Interface erweitert, wenn neue Optionen hinzukommen. Ich kann allerdings garantieren, dass die neuen Methoden niemals bei alten Versionen aufgerufen werden.
Allerdings denke ich momentan nach, wie ich das sauberer lösen kann, dennoch würde mich eine Antwort interessieren.
Gegeben seien von einem Interface A zwei Versionen. (Die eine älter, die eine neue) sowie zwei davon abgeleitete Klassen.
Code:
// Version 1
public interface A {
public void doSomething();
}
Code:
// Version 2, neuer
public interface A {
public void doSomething();
public void doSomeOtherThing();
}
Klasse B1 wurde mit der Version 1 kompiliert, Klasse B2 mit der Version 2.
Wann kracht es, wenn ich sowohl ein Objekt von B1 und B2 anlege? Sofort beim laden der Klasse B1? Oder erst wenn ich auf einem Objekt der Klasse B1 die Methode doSomeOtherThing() versuche aufzurufen?
Hintergrund der ganzen Geschichte ist der, dass ich für mein Programm eine Art Plugin Struktur haben will für Computergegner. Dabei kann es sein, dass sich das zu implementierende Interface erweitert, wenn neue Optionen hinzukommen. Ich kann allerdings garantieren, dass die neuen Methoden niemals bei alten Versionen aufgerufen werden.
Allerdings denke ich momentan nach, wie ich das sauberer lösen kann, dennoch würde mich eine Antwort interessieren.