Ich hatte in meinem Kurs eine Aufgabe, die ich folgend posten werde. Die Lösung, die ich ebenfalls anhänge hatte ich bereits weggeschickt und zu meinem Entsetzen mit ungenügend bewertet zurück bekommen. Damit ich jetzt nicht die restlichen Tage in Depressionen verbringe, wollte ich Euch bitten mir wenigstens zu sagen wo ich denn den kapitalen Fehler eingebaut habe:
Aufgabenstellung:
Gegeben sei folgende Klassenstruktur:
class Person {}
class Angestellter extends Person implements IAusgebildet {}
class Auszubildender extends Person {}```
Wie muss eine weitere Klasse
```public class Gesucht extends Person```
parametrisiert werden, damit einer Gesucht Instanz lediglich ausgebildete Angestellte zugewiesen werden können? Ergänzen Sie auch die entsprechenden Getter und Setter.
Meine versendete Antwort sah so aus:
```// Gewünschte Klasse laut Aufgabe 4:
public class Gesucht<G extends Person & IAusgebildet> {
private G g;
public void set (G g) {
this.g = g;
}
public G get() {
return g;
}
public static void main(String[] args) {
Gesucht<Angestellter> gAngestellter = new Gesucht<Angestellter>();
gAngestellter.set(new Angestellter());
System.out.println(gAngestellter.get());
}
}
// Vorhandene Klassen:
class Azubi extends Person {}
class Person { public String name; }
class Angestellter extends Person implements IAusgebildet {}
interface IAusgebildet {}```
Ich habe doch in meiner Lösung in der main definitiv geschrieben:
```Gesucht<Angestellter> gAngestellter = new Gesucht<Angestellter>()```
Ist das nicht bindend? Was ist denn daran falsch? Was wurde stattdessen erwartet?
mich stört an der Aufgabenstellung der Begriff „parametrisiert“
Eine Klasse kann nach meinem Wissensstand nicht parametrisiert werden, das was du gemacht hast ist einfach nur ein Generic.
Wenn ich jetzt eine Klasse erzeugen will der nur X zugewiesen werden kann leite ich sie einfach nur von X ab, aber das geht ja nicht da ja schon X vorgegeben ist bei dir.
Entweder hast du das falsch verstanden oder die haben komische Aufgaben bei euch
@EagleEye: Der Aufgabentext ist tatsächlich original wiedergegeben, die Implementierung der Klasse “Gesucht” stammt dementsprechend von mir, inklusive der zugefügten Parameter. Als Bemerkung zu meiner Ausführung stand: Falsch, es sollen nur “Angestellte” erlaubt sein.
Sollte es tatsächlich so simple sein das einfach etwas in dieser Richtung: class Gesucht extends Angestellter gedacht war?
Such mal in den Unterlagen was du zu Parametrisierung findest, weil das was ich unter Parametrisierung kenn hat NIX mit Klassen zu tun nur mit Methoden
Jup, Verwendung in Methoden, ist schon richtig, deshalb ja auch meine Verwendung in der main: Gesucht<Angestellter> gAngestellter = new Gesucht<Angestellter>()
Parametrisierte Instanziierung meines gesuchten Angestellten. Oder lauf ich hier grad auf nem völlig falschen Ast?
Die Bounds im Kopf der Klasse, hatte ich kreiert um die netten Getter und Setter zu basteln.
Ich kann die Klasse im Kopf nicht mit „…extends Angestellter“ einschränken, da schon durch „…extends Person“ belegt. Also welche alternativen habe ich? Die Klasse Person musste ich ja (gezwungenermaßen) erben und das IAusgebildet-Interface kann ich ja einbinden, damit sich automatisch die gleiche Konstellation wie bei einem Angestellten ergibt. Somit ist das Ziel doch definitiv erreicht, oder nicht?
Wenn ich eine rote und eine blaue Schüssel habe und auf beiden sind Aufkleber, das nur Obst und nur Äpfel rein dürfen, dann ist doch der Inhalt nachher bei beiden Schüsseln der gleiche, völlig wurscht welche Farbe die Schüsseln haben… class Gesucht extends Person implements IAusgebildet
und class Angestellter extends Person implements IAusgebildet
beinhalten doch exakt den gleichen Personenkreis, erzwungen durch „Person“ und „IAusgebildet“, oder nicht?
Aber sonste… was soll denn “Gesucht” sein? “Gesucht” IST eine Peson (wegen “extends Person”), aber sie enthält auch ein Person? Ja, Frauen enhalten eine Factory, um neue Mensch-Instanzen zu erzeugen. Ich gehe mal davon aus, dass das “extends Person” eher eine Art… Tippfehler war. So macht das ja keinen Sinn.
Jedenfalls denke ich, dass der Ansatz von
public class Gesucht<G extends Person & IAusgebildet> {
da schon nicht ganz falsch ist. Aber damit einer Gesucht Instanz lediglich ausgebildete Angestellte zugewiesen werden können muss man noch mehr einschränken. Oben könnte man ja noch sowas machen wie
class Teilzeitgebäudereinigungsfachkraft extends Person implements IAusgebildet {}
...
gesucht.set(new Teilzeitgebäudereinigungsfachkraft());
Und dann wäre dem Gesucht etwas anderes als ein "ausgebildeter Angestellter zugewiesen.
Es müßte dann wohl wirklich
public class Gesucht<G extends Angestellter> {
sein (das “& IAusgebildet” braucht man dann nichtmehr, weil jeder Angestellte ausgebildet ist)
Am Anfang dachte ich, es wäre eine Scherzfrage :o)
Man soll eine Klasse kreieren, die a)Angestellte- und b) diese nur ausgebildet - verwendet. Scherzkekse, es gibt ja auch gar keine anderen Angestellten laut Klassenliste. Also hopp - ne vernünftige Methode in die class Angestellter und fertig…
Oki, Scherz beiseite. Ich hab das Lernheft durch, hab mein Buch „Java ist auch eine Insel“ durchforstet, kann Google nicht mehr sehen und werde aus der API nicht schlauer.
@Marco13: Leider kein Tippfehler… aber netter Versuch und du hast Recht ne Gebäudereinigung wollte ich nicht erzeugen
Ich war einfach der Meinung, das meine Instanziierung in der main völlig ausreichend ist, da das nicht irgendeine schnulli-Methode ist, sondern eben DIE main. Und an der traut sich eigentlich keiner vorbei…
Und da „…extends Person“ vorgegeben ist, weiß ich sonst erst mal nix weiter konstruktives.