abstrakte methoden in subclass?

shepherd333

Mitglied
Ich habe ein Projekt mit einer Klasse Mitarbeiter (mit setters und getters) und 2 unterKlassen (Angestellter+Arbeiter) auch mit ihren eigenen setters+getters.
// beide unterKlassen haben einen "toString" override damit diese bei einer Ausgabe, die einzelnen variablen ausgeben und die variablen der Super-Klasse "Mitarbeiter".

In der Main habe ich 12 objekte erstellt. 6 Angestellte, 6 Arbeiter und sie einem einfachen!!!! Array zugeordnet. [12].

Frage1: Ich kann in der main keine methoden der subsclassen aufrufen.
Also ein Arbeiter1.setStundenlohn(5); oder Arbeiter2.getStundenlohn(); werden mir nicht angezeigt/erlaubt/ermöglicht.
Wieso nicht?


Frage2: ich muss das Programm ausbauen und sie abstract machen.
Es ist verlangt:


Ändern Sie die Klasse Mitarbeiter als abstrakte Klasse!

Dort soll eine Abstrakte Methode namens „berechneBrutto()“ deklariert werden:

d.h. abstract double berechneBrutto(); //liefert brutto als double zurück!

Ändern Sie die Klassen Angestellter und Arbeiter:

Hierbei soll berechneBrutto() implementiert werden.

void berechneBrutto()



Das ist für mich verwirrend. Ich dachte abstrakte methoden müssen vom Typ her immer gleich sein.
So wie ich das verstehe will man hier eine abstract double berechneBrutto(); in der Klasse Mitarbetier haben aber eine void berechneBrutto() in den Klassen Arbeiter und Angestellter. Oder wie seht ihr das? Dachte methoden müssen immer den selben typ beibehalten. Also ich kann nicht eine public int methode1() haben und dann eine public double methode1() daraus machen.


Hier vielleicht damit ihr euch das besser vorstellen könnt die zwei Klassen Mitarbeiter und Arbeiter.

Arbeiter.png




***********************************************************************************************************************************************************
*************************************************************************************************************************************************************


mitarbeiter.png
 
K

kneitzel

Gast
In Mitarbeiter soll die abstrakte Methode. Schau Dir an, was eine abstrakte Methode ist, falls du damit Probleme hast.

In Arbeiter überschreibst du dann die Methode, d.h. da ist die Methode dann nicht abstrakt.

Wenn du ein Array vom Typ Mitarbeiter hast, dann kannst Du nur die Methoden von Mitarbeiter aufrufen, auch wenn es eine Arbeiter Instanz ist. Es muss ja keine Arbeiter Instanz sein, d.h. der Compiler kann nicht voraus setzen, dass es die Methode aus Arbeiter gibt.
Du kannst aber prüfen, ob es eine Instanz von Arbeiter ist (siehe instanceof) um dann einen cast zu Arbeiter zu machen und die Methode aus Arbeiter aufrufen,
 

shepherd333

Mitglied
In Mitarbeiter soll die abstrakte Methode. Schau Dir an, was eine abstrakte Methode ist, falls du damit Probleme hast.
Meine Frage ist: Kann man eine abstrakte Methode mit einem "ANDEREN" Typ schreiben als vorher definiert?
Kann ich die Methode abstrakt machen: "double berechne()"
aber dann in der subklasse sie dann als "void berechne()"
{
}
definieren????? Genau das will ich wissen!
In Arbeiter überschreibst du dann die Methode, d.h. da ist die Methode dann nicht abstrakt.
Das ist schon klar.
Wenn du ein Array vom Typ Mitarbeiter hast, dann kannst Du nur die Methoden von Mitarbeiter aufrufen, auch wenn es eine Arbeiter Instanz ist. Es muss ja keine Arbeiter Instanz sein, d.h. der Compiler kann nicht voraus setzen, dass es die Methode aus Arbeiter gibt.
Du kannst aber prüfen, ob es eine Instanz von Arbeiter ist (siehe instanceof) um dann einen cast zu Arbeiter zu machen und die Methode aus Arbeiter aufrufen,
Ok, ich hätte es doch dazuschreiben sollen denn meine Fragen haben nichts mit dem Array zu tun.
Vielleicht so wirds verständlicher:
Ich hab 6 Angestellte erstellt und 6 Arbeiter.
Mitarbeiter A1 = new Angestellter(...............);
..
.
.
Mitarbeiter Ar2 = new Arbeiter(..............);
.
.
.

Ich kann mit allen nur die Mitarbeiter-Methoden aufrufen. Sprich setID und setName. Aber nicht ihre eigenen Methoden (setStdlohn,setSchichtzulage,ect).

ich kann zb Ang1.setID(3)
ich kann aber nicht Ang1.setStdLohn(3);
ausführen.

Vielleicht fehlt mir wo das grammatikalische Verständnis der Aufgabe aber es heißt in Mitarbeiter soll sie als abstrakt double deklariert sein aber dann später in Arbeiter und Angestellter als void. Geht das überhaupt? mMn nicht.
 
K

kneitzel

Gast
Kann ich die Methode abstrakt machen: "double berechne()"
aber dann in der subklasse sie dann als "void berechne()"
{
}
definieren????? Genau das will ich wissen!
Nein, das geht nicht.

Beim Überschreiben muss der Return Typ gleich sein oder davon abgeleitet sein (Covariant):
JLS 8.4.5:
Return types may vary among methods that override each other if the return types are reference types. The notion of return-type-substitutability supports covariant returns, that is, the specialization of the return type to a subtype.

Was eine Variable vom Typ Mitarbeiter angeht: Ja, da kannst Du nur Mitarbeiter Methoden aufrufen (oder eben einen cast ausführen, das wird aber in der Regel mit einem ersten Check gemacht.
 

shepherd333

Mitglied
Nein, das geht nicht.
Na dann macht die Aufgabe keinen Sinn. Es sollte dann doch beides "double" sein oder beides void. Wobei ich glaube fast es ist gemeint eine void zu schreiben und dann diese in der double aufzurufen. lol
Was eine Variable vom Typ Mitarbeiter angeht: Ja, da kannst Du nur Mitarbeiter Methoden aufrufen (oder eben einen cast ausführen, das wird aber in der Regel mit einem ersten Check gemacht.
Ich bräuchte hier einen code als Beispiel was du genau meinst aber ich glaube ich habe mein Problem bzw. meine Frage gerade selber beantwortet.
Ich habe die Objekte mit
Mitarbeiter A1 = new Arbeiter();
erstellt
Ich hätte sie aber so erstellen sollen:
Arbeiter A1 = new Arbeiter(..................);

Bazinga ;)
 

mihe7

Top Contributor
Es ist verlangt:


Ändern Sie die Klasse Mitarbeiter als abstrakte Klasse!

Dort soll eine Abstrakte Methode namens „berechneBrutto()“ deklariert werden:

d.h. abstract double berechneBrutto(); //liefert brutto als double zurück!

Ändern Sie die Klassen Angestellter und Arbeiter:

Hierbei soll berechneBrutto() implementiert werden.

void berechneBrutto()



Das ist für mich verwirrend.
Wenn die Aufgabe wörtlich so gestellt wurde, dann ist das für meine Begriffe nicht nur verwirrend, sondern schlicht ein Fehler.
 

temi

Top Contributor
Ich bräuchte hier einen code als Beispiel was du genau meinst aber ich glaube ich habe mein Problem bzw. meine Frage gerade selber beantwortet.
Ich habe die Objekte mit
Mitarbeiter A1 = new Arbeiter();
erstellt
Ich hätte sie aber so erstellen sollen:
Arbeiter A1 = new Arbeiter(..................);
Da ein Arbeiter ein Mitarbeiter ist, war die ursprüngliche Lösung schon in Ordnung. Da der statische Typ der Variablen aber Mitarbeiter ist, kannst du nur die Methoden von Mitarbeiter aufrufen. Oder auf den darin enthaltenen Arbeiter casten (den Typ umwandeln): Arbeiter arbeiter = (Arbeiter)a1;. Aber Vorsicht, das kann auch zu einer Ausnahme (ClassCastException) führen, wenn es sich bei der in der Mitarbeitervariablen enthaltenen Referenz nicht um einen Arbeiter handelt. Daher sollte man das vorher überprüfen.

BTW: In Java gilt u. a. als Konvention, dass Klassennamen mit einem Großbuchstaben beginnen und Methoden-/Variablennamen mit einem Kleinbuchstaben (in deinem Fall Mitarbeiter A1 => Mitarbeiter a1). Sich daran zu halten, macht es für alle einfacher, sich in deinen Programmen zurecht zu finden.
 
K

kneitzel

Gast
Ich bräuchte hier einen code als Beispiel was du genau meinst
Ich meinte etwas in der Art:
Java:
Mitarbeiter m = .....;
if (m instanceof Arbeiter) {
    Arbeiter a = (Arbeiter) m;
    // Hier dann a nutzen um Methoden vom Mitarbeiter aufzurufen.
}

Oder ab Java 14 wäre auch möglich:
Java:
Mitarbeiter m = .....;
if (m instanceof Arbeiter a) {
    // Hier dann a nutzen um Methoden vom Mitarbeiter aufzurufen.
}

Das nennt sich dann Pattern Matching for instanceof und ist ab Java 14 vorhanden:
Java 14 / 15 als Preview (JEP 305 / 375) und mit Java 16 final (JEP 394) (Über den 394 kann man die anderen beiden JEP auch schnell aufrufen)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
E verdeckte abstrakte Methode sinnvoll? Java Basics - Anfänger-Themen 7
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
A Eine abstrakte Methode static machen? Java Basics - Anfänger-Themen 4
A Abstrakte Klassen und Interfaces Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben