Vererbung

Kann mir bitte jemand helfen diese Quellcodes zu erstellen? Nummer 2.) und 3.). Ich kann keine erstellen, hab wirklich null Ahnung, also spart euch das mit: Versuchs selber! Hab es versucht und alles war nur falsch. Schreibe am Freitag nen Test, wäre lieb, wenn mir jemand helfen würde
 

Anhänge

  • EDEF79FB-1C6E-479A-8D82-A044D4BEB6F6.jpeg
    EDEF79FB-1C6E-479A-8D82-A044D4BEB6F6.jpeg
    88 KB · Aufrufe: 14
  • 1FD65BD4-BEF7-4F58-9BB2-714FF34F18CC.jpeg
    1FD65BD4-BEF7-4F58-9BB2-714FF34F18CC.jpeg
    27,8 KB · Aufrufe: 14

mihe7

Top Contributor
Hab es versucht und alles war nur falsch.
Aus Fehlern lernt man. Zeig doch mal, was Du probiert hast, dann kann man Dir auch helfen.

Ich kann keine erstellen, hab wirklich null Ahnung, also spart euch das mit: Versuchs selber!
Du brauchst nichts zu versuchen, denn das Thema Vererbung (= Thema dieses Threads) wird in der Aufgabenstellung zu Aufgabe 2 schon vollständig erschlagen.

Für Aufgabe 3 musst Du nur die in Aufgabe 2 gezeigte Klassendefinition anpassen. Manager durch Vorstand und Angestellter durch Manager zu ersetzen und dem super()-Aufruf den dritten Parameter hinzuzufügen, das kann man schon fast nicht als Transferleistung ansehen.
 

KonradN

Super-Moderator
Mitarbeiter
Ich kann keine erstellen, hab wirklich null Ahnung,
Schreibe am Freitag nen Test, wäre lieb, wenn mir jemand helfen würde
Also wenn Du am Freitag einen Test schreibst (da also aktiv Dein Wissen abgefragt wird), dann hilft es Dir doch nicht, wenn wir Dir eine Lösung geben. Die Vorstellung durch das Betrachten einer Lösung irgend etwas zu verstehen, ist aus meiner Sicht unrealistisch. Du kannst dann eine Lösung ggf. nachvollziehen. Aber Du musst doch im Test zu eigenen Aufgaben Lösungen erstellen.

Und die Qualität der Bilder hast Du auch nicht mal gepüft? Das zweite ist ja viel zu klein. Stark vergößert kann man es dann evtl. etwas erahnen, was da steht ... Ok, für die Aufgabe war dieses eigentlich erste Blatt weniger wichtig, aber das bestätigt das Gesamtbild ...

Aber was schreibe ich da ... es geht ja offensichtlich nicht um eine Hilfeanfrage bezüglich Java Fragen sondern um eine Art Hausaufgabe. Also muss man da nicht antworten (maximal die Frage: Was zahlst Du?) sondern es nur einfach in das entsprechende Unterforum verschieben lassen.
 
Also wenn Du am Freitag einen Test schreibst (da also aktiv Dein Wissen abgefragt wird), dann hilft es Dir doch nicht, wenn wir Dir eine Lösung geben. Die Vorstellung durch das Betrachten einer Lösung irgend etwas zu verstehen, ist aus meiner Sicht unrealistisch. Du kannst dann eine Lösung ggf. nachvollziehen. Aber Du musst doch im Test zu eigenen Aufgaben Lösungen erstellen.

Und die Qualität der Bilder hast Du auch nicht mal gepüft? Das zweite ist ja viel zu klein. Stark vergößert kann man es dann evtl. etwas erahnen, was da steht ... Ok, für die Aufgabe war dieses eigentlich erste Blatt weniger wichtig, aber das bestätigt das Gesamtbild ...

Aber was schreibe ich da ... es geht ja offensichtlich nicht um eine Hilfeanfrage bezüglich Java Fragen sondern um eine Art Hausaufgabe. Also muss man da nicht antworten (maximal die Frage: Was zahlst Du?) sondern es nur einfach in das entsprechende Unterforum verschieben lassen.
ne ist keine hausaufgabe, der quellcode kommt dran und wollte den auswendig lernen
 

KonradN

Super-Moderator
Mitarbeiter
Also Code "auswendig lernen" ist kein Ansatz, der zum Erfolg führt fürchte ich. Oder erwartest Du, wirklich genau diese Aufgabe zu bekommen?

@mihe7 hat ja schon ausgeführt, dass bei der Aufgabe selbst keine hohe Transferleistung notwendig ist. Hier geht es also einfach um ein kleines Verständnis, was Java wie macht.

Und in der Regel sind das, was da gerade abgefragt wird, absolute Basics. Darauf wird dann ja im Weiteren drauf zugegriffen. Wenn diese Basics nicht halbwegs sitzen, dann hast Du bei dem Stoff, der da noch kommen wird, einfach keine Chance. (Wobei das ja evtl. etwas ist , das Du nicht weiter benötigst - da wir nichts wissen über Deine Situation, sind das natürlich nur Vermutungen...
 
Also Code "auswendig lernen" ist kein Ansatz, der zum Erfolg führt fürchte ich. Oder erwartest Du, wirklich genau diese Aufgabe zu bekommen?

@mihe7 hat ja schon ausgeführt, dass bei der Aufgabe selbst keine hohe Transferleistung notwendig ist. Hier geht es also einfach um ein kleines Verständnis, was Java wie macht.

Und in der Regel sind das, was da gerade abgefragt wird, absolute Basics. Darauf wird dann ja im Weiteren drauf zugegriffen. Wenn diese Basics nicht halbwegs sitzen, dann hast Du bei dem Stoff, der da noch kommen wird, einfach keine Chance. (Wobei das ja evtl. etwas ist , das Du nicht weiter benötigst - da wir nichts wissen über Deine Situation, sind das natürlich nur Vermutungen...
ja diese aufgabe kommt dran
 
Also Code "auswendig lernen" ist kein Ansatz, der zum Erfolg führt fürchte ich. Oder erwartest Du, wirklich genau diese Aufgabe zu bekommen?

@mihe7 hat ja schon ausgeführt, dass bei der Aufgabe selbst keine hohe Transferleistung notwendig ist. Hier geht es also einfach um ein kleines Verständnis, was Java wie macht.

Und in der Regel sind das, was da gerade abgefragt wird, absolute Basics. Darauf wird dann ja im Weiteren drauf zugegriffen. Wenn diese Basics nicht halbwegs sitzen, dann hast Du bei dem Stoff, der da noch kommen wird, einfach keine Chance. (Wobei das ja evtl. etwas ist , das Du nicht weiter benötigst - da wir nichts wissen über Deine Situation, sind das natürlich nur Vermutungen...
ich versuche mich immer reinzulesen in diesem thema hatte einen crash kurs aber es hilft einfach nicht
 

KonradN

Super-Moderator
Mitarbeiter
ich versuche mich immer reinzulesen in diesem thema hatte einen crash kurs aber es hilft einfach nicht
Da wäre dann ja schlicht die Frage, an was es hängt. Wenn man wüsste, an was es hängt, dann könnte man weiter helfen.

ja diese aufgabe kommt dran
Aber doch nicht GENAU diese Aufgabe. Sondern nur eine Aufgabe in der Art. Wenn Du irgendwie an die Aufgaben, die am Freitag gestellt werden, gekommen bist, dann wäre es nicht ratsam, damit an die Öffentlichkeit zu gehen :)
 

M.L.

Top Contributor
Zusatz: was, wenn jemand (mit/ohne z.B. ChatGPT) (un)absichtlich eine (sub)optimale (evtl. sogar komplett falsche) Lösung präsentiert ?
Ein Verständnis der Reaktionen des Compilers auf die Zugriffsmodifizierer sowie dem längerfristigen Sinn von Getter-/Setter-Methoden (inkl. Namensgebung) wäre da wohl hilfreicher...

So könnte z.B. Vorstand.java aussehen (absichtlich als Bild):

Vorstand_java.JPG
 
Zusatz: was, wenn jemand (mit/ohne z.B. ChatGPT) (un)absichtlich eine (sub)optimale (evtl. sogar komplett falsche) Lösung präsentiert ?
Ein Verständnis der Reaktionen des Compilers auf die Zugriffsmodifizierer sowie dem längerfristigen Sinn von Getter-/Setter-Methoden (inkl. Namensgebung) wäre da wohl hilfreicher...

So könnte z.B. Vorstand.java aussehen (absichtlich als Bild):

Anhang anzeigen 20718
ist das richtig ?
 

mihe7

Top Contributor
ich versuche mich immer reinzulesen in diesem thema hatte einen crash kurs aber es hilft einfach nicht
Das geht schon, so schwer ist das nicht.

Wenn die Aufgabe lautet "schreibe eine (öffentliche) Klasse B", dann wäre das einfach mal
Java:
public class B {
}

Erweitern wir die Aufgabe mal: "schreibe nun eine öffentliche Klasse K, die von Klasse B ableitet/erbt", dann schreibst Du
Java:
public class K extends B {
}
Das ist fast schon reines Englisch: "öffentliche Klasse B" und "öffentliche Klasse K erweitert B". Damit wäre das Ableiten von Klasen schon zu einem guten Teil erledigt (für die Aufgabe reichts).

Heißt: Du merkst Dir, wie man ganz allgemein Klassen definiert (wie die Klasse B) und dass Du für das Ableiten von einer Basisklasse noch ein "extends B" hinzufügst, wobei B der Name der Basisklasse ist.

Das war ja nun nicht schwer, oder?

Gibst Du kein extends an, wird übrigens automatisch extends java.lang.Object eingesetzt. D. h. tatsächlich haben in Java alle selbstgeschriebenen Klassen eine Basisklasse, von der sie abgeleitet sind.

Wie ist das nun mit den Konstruktoren? Jede Klasse, die Du schreibst, hat mindestens einen Konstruktor und jeder dieser Konstruktoren ruft genau einen Konstruktor der Basisklasse auf.

Wenn Du jetzt sagst: "erzähl keinen Scheiß, die Klassen da oben haben ja gar keine Konstruktoren", dann muss ich Dich enttäuschen. Wenn Du selbst keinen Konstruktor definierst (wie in den Klassen B und K), dann spendiert Dir Java automatisch einen Standardkonstruktor, der keine Parameter besitzt und einfach den Konstruktor der Basisklasse aufruft.

Einen Konstruktor der Basisklasse rufst Du mit dem Schlüsselwort super auf. Der Aufruf muss die erste Anweisung im Konstruktor sein. Das siehst Du z. B. in Aufgabe 2.

Gibst Du selbst keinen Aufruf an, wird automatisch super(); aufgerufen, d. h. der parameterlose Konstruktor der Basisklasse. Wenn die Basisklasse keinen parameterlosen Konstruktor hat, meldet der Compiler in diesem Fall einen Fehler.

Hört sich kompliziert an, ist aber eigentlich ganz einfach. Der Code oben ließe sich ausführlich auch wie folgt schreiben:
Java:
public class B extends java.lang.Object {
    public B() {
        super();
    }
}
und
Java:
public class K extends B {
    public K() {
        super();
    }
}
Das "extends java.lang.Object" gibt man aber normalerweise nicht an, ich lasse das jetzt auch wieder weg.

Wenn wir jetzt dem Konstruktor in B einen Parameter und noch etwas Code spendieren:
Java:
public class B {

    public B(String einName) {
        super();
        System.out.println("Hallo " + einName);
    }
}

... dann bekommst Du einen Kompilierungsfehler. Warum?

Klasse K versucht, den parameterlosen Konstruktor von B aufzurufen. Den gibt es aber nun offensichtlich ncht mehr. Also muss der super-Aufruf in Klasse K angepasst werden, z. B. könnte man einfach einen fixen String angeben:
Java:
public class K extends B {
    public K() {
        super("Hans");
        System.out.println("Mach's gut, Deine Klasse K");
    }
}

Wird nun irgendwo ein Objekt der Klasse K erzeugt, dann wird der Konstruktor von K ausgeführt, der zunächst super("Hans") aufruft, also den Konstruktor der Basisklasse B, der einen String erwartet. Der Konstruktor B(String einName) ruft seinerseits den Konstruktor der Basisklasse java.lang.Object auf. Was dort passiert, muss uns nicht weiter interessieren. Danach gibt der Konstruktor von B "Hallo Hans" auf dem Bildschirm aus. Jetzt kehren wir zum Konstruktor von K zurück, denn der Aufruf super("Hans") ist nun erledigt. Dort wird noch "Mach's gut, Deine Klasse K" ausgegeben. Fertig.

Probier ein wenig rum, bis Du damit vertraut bist. Wenn Du das ein paar mal geschrieben hast (möglichst aus dem Kopf), dann weißt Du am Freitag auch, wie das läuft.
 

White_Fox

Top Contributor
Nun, das ist vernünftig. Aber das:
also spart euch das mit: Versuchs selber!
ist halt nicht vernünftig.

Beim Lernen helfen wir dir (mihe7 ist da ja schon übereifrig dabei), aber fertigen Code zum Auswendiglernen schreibe ich dir ganz sicher nicht. Einerseits habe ich dazu keine Lust, andererseits gibt es in allen Entwicklerdisziplinen bereits genug unfähige Idioten, die nicht halb so gut sind wie es ihre Zeugnisse vermuten lassen würden und wir brauchen nicht noch mehr davon.

Hast du denn das Thema eigentlich verstanden und weißt nur nicht wie du das im Code formulieren sollst, oder hast du so komplett gar keine Ahnung was da wie vor sich geht?
 

Neue Themen


Oben