@BlueCobold
Ich glaube ich habe das ganze ein bisschen falsch erklärt.
In meinem Falle ist "assignShape" ein simpler getter beziehungsweise setter, je nachdem wie die Methode am Ende nun aussieht. Die Klasse CollisionObject enthält eine Variable. Diese soll je nach Subklasse anders aussehen; Allerdings soll der Entwickler der Subklasse sich nicht daran erinnern müssen die Variable selber zu initialisieren, sondern er wird dazu aufgefordert (Muss also) eine abstrakte Methode der Superklasse zu implementieren.
(Da fällt mir auch gerade ein weiterer Fehler in meinem Code vom Startpost ein; assignShape() sollte ein getter sein welcher in der Superklasse benutzt wird. In Java könnte das ganze so aussehen:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
public abstract class CollisionObject {
Shape shape;
public CollisionObject(){
shape = assignShape();
}
public abstract Shape assignShape(); //Sollte eigentlich getShape heißen, aber da ich das ganze jetzt schon so angefangen habe nenne ich es jetzt nicht um
}
public class CollisionRect extends CollisionObject {
public Shape assignShape(){return new Shape(blabla);} //MUSS implementiert werden
}
//!\\ Bei Initialisierung von einem CollisionRect wird nun der Konstruktor von CollisionRect Aufgerufen, und implizit auch der von CollisionObject; In diesem wird nun assignShape() von CollisionRect der Variable zugewiesen, was eine NPE vermeiden wird.
|
Klar, ich könnte einfach eine Shape im Konstrukor per CollisionRect : CollisionObject(dieShape) mitgeben, aber es geht hier eher ums Prinzip falls es doch mal etwas komplizierter sein muss.
Ich hoffe ich konnte mich etwas klarer ausdrücken und habe deinen Post nicht komplett missverstanden.
MfG
Darkium