Klassen Verwendung abstrakter Klassen

friednoodles

Aktives Mitglied
Ich beschäftige mich gerade mit abstrakten Klassen und habe ein Problem beim Aufrufen dieser.
Das ist meine abstrakte Klasse:
Java:
public abstract class AbstractClass {

    public abstract void abstractMethod();

    public void implementedMethod() {
        System.out.println("-> konkrete Methode aus der abstrakten Klasse");
    }
}
Und hier meine implementierende Klasse
Java:
public class ImplementingClass extends AbstractClass {

    public void abstractMethod() {
        System.out.println("-> abstrakte Methode konkretisiert");
    }

    public void implementedMethod() {
        System.out.println("-> Ich wurde überschrieben!");
    }

}

Und mein Aufruf in der Main:
Java:
        ImplementingClass a = new ImplementingClass();
        AbstractClass b = new ImplementingClass();
        
        a.abstractMethod();
        a.implementedMethod();
        
        b.abstractMethod();    
        b.implementedMethod();

1. Was genau passiert in der zweiten Zeile der Main? Erstelle ich ein Objekt der implementierenden Klasse und weise ihm der Variable b vom Typ der abstrakten Klasse zu? Kann mir jemand den Unterschied zwischen Zeile 1 und 2 der Main erklären?
2. Was ist der unterschied zwischen den Methodenaufrufen mit a.methode(); und b.methode(); ? Es kommen alle vier Konsolenausgaben aus der implementierenden Klasse, aber b.abstractMethod(); scheint erst in die abstrakte Klasse zu gehen?
3. Wie ruft man die konkrete Methode der Abstrakten Klasse auf?
 

mrBrown

Super-Moderator
Mitarbeiter
Erstelle ich ein Objekt der implementierenden Klasse und weise ihm der Variable b vom Typ der abstrakten Klasse zu?
Ja.

Kann mir jemand den Unterschied zwischen Zeile 1 und 2 der Main erklären?
a hat den statischen Typ ImplementingClass
a hat den statischen Typ AbstractClass.
Beide haben den gleichen dyadischen Typ.
Der Unterscheid ist, dass der Compiler nur den statischen Typ prüft. Auf b kannst du zB nur die Methoden aufrufen, die AbstractClass deklariert.

Was ist der unterschied zwischen den Methodenaufrufen mit a.methode(); und b.methode(); ? Es kommen alle vier Konsolenausgaben aus der implementierenden Klasse,
Keiner. Die Methode ist in AbstractClass deklariert, daher kannst du sie in beiden Fällen aufrufen. Beide male ist es der gleiche Dynamische Typ, daher gleiches Verhalten.

aber b.abstractMethod(); scheint erst in die abstrakte Klasse zu gehen?
Was meinst du damit?

3. Wie ruft man die konkrete Methode der Abstrakten Klasse auf?
Wenn du sie überschreibst von außen gar nicht, nur die überschreibende Klasse kann sie dann mit super.implementedMethod() aufrufen.
 

friednoodles

Aktives Mitglied
Was meinst du damit?

Wenn ich in Eclipse mit der Maus über die vier Methoden gehe sticht b.abstractMethod(); farblich heraus. Wenn ich das richtig verstanden habe liegt das daran das abstractMethod(); aus der abstrakten Klasse im Prinzip als Schnittstelle fungiert?

Scheint banal zu sein, aber ich will nur sicher gehen das ich es richtig verstanden habe.
 
K

kneitzel

Gast
Also ich weiss jetzt nicht genau, was Du mit "sticht farblich heraus" meinst. Mein Eclipse zeigt die Funktionen normal an. Lediglich links von den Zeilennummern sehe bei den Funktionen kleine Dreiecke und die haben unterschiedliche Farbe.

Generell ist es bei eclipse meistens so, dass bei allen Anzeigen der Grund angezeigt wird, wenn man mit der Maus drüber geht. Und bei mir kommen dann Popups die besagen "implements AbstractClass.abstractMethod" und "overrides AbstractClass.implementedMethod".

Aber evtl. hast Du eine andere Version von Eclipse oder ein AddOn zeigt etwas mehr an. Aber dann kannst Du bestimmt auch mit der Maus einmal auf die farbliche Markierung gehen um zu sehen, was eclipse Dir da sagen will.
 

friednoodles

Aktives Mitglied
Java:
        a.abstractMethod(); //void ImplementingClass.abstractMethod()
        a.implementedMethod(); //void ImplementingClass.implementedMethod()

        b.abstractMethod(); //void AbstractClass.abstractMethod()
        b.implementedMethod(); //void AbstractClass.implementedMethod()

In den Kommentaren steht was auftaucht wenn ich mit der Maus über die Aufrufe gehe.

Beide Objekte a und b wurden mit dem selben dynamischen Typ erstellt und Verhalten sich daher identisch.
Warum besteht dann der folgende Unterschied?

Bei
Java:
b.abstractMethod();
ist ein grüner Punkt mit einem A, was mir vermutlich anzeigen soll das es sich um eine abstrakte Methode handelt.

Bei
Java:
a.abstractMethod();
hat der grüne Punkt kein A, obwohl es sich aber um die selbe abstrakte Methode handelt.

Es will einfach noch nicht Klick machen bei mir...
 
K

kneitzel

Gast
Wichtig ist erst einmal: Was da passiert hast Du soweit verstanden? Unabhängig davon, was Eclipse Dir als Hilfestellung noch zeigen will?

Anscheinend zeigt Dir Eclipse bei Aufrufen noch einmal Details zu der aufgerufenen Funktion an. Und dabei zeigt er Dir den Aufruf der abstrakten Methode auf der abstrakten Klasse farblich etwas anders da. Das wird daran liegen, dass eben AbstractClass.abstractMethod() erst einmal abstract ist.

Die Grünen Punkte / A habe ich im Outline Fenster. Grüner Punkt bedeutet, dass es sich um eine public Methode handelt. A bedeutet, dass die Funktion abstract ist.

Bei a.abstractMethod() ist a doch vom Typ ImplementingClass und abstractMethod ist in ImplementingClass nicht Abstract, daher ist dort kein A.
 

friednoodles

Aktives Mitglied
Wichtig ist erst einmal: Was da passiert hast Du soweit verstanden?
Unabhängig davon, was Eclipse Dir als Hilfestellung noch zeigen will?
Ja, soweit hab ich das alles verstanden.

Bei a.abstractMethod() ist a doch vom Typ ImplementingClass und abstractMethod ist in ImplementingClass nicht Abstract, daher ist dort kein A.
Eigentlich ziemlich einfach diese Erklärung, keine Ahnung warum das so lange gedauert hat das zu verstehen.
 
K

kneitzel

Gast
Eigentlich ziemlich einfach diese Erklärung, keine Ahnung warum das so lange gedauert hat das zu verstehen.

Sowas kann gerade am Anfang schnell mal sein. Die modernen Entwicklungsumgebungen bieten so viel an an Unterstützung. Das man da am Anfang leicht verwirrt wird, kann ich sehr gut verstehen. Und ich finde es gut, dass Du das nicht einfach ignorierst sondern direkt hinterfragst!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
D Verwendung von Selenium Allgemeine Java-Themen 2
P ClassCastException bei Verwendung eines Interfaces Allgemeine Java-Themen 7
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
M Verwendung der Cipher von gnu crypto (Serpent) Allgemeine Java-Themen 3
B Verwendung von Packages im Java Code Allgemeine Java-Themen 10
P Richtige Verwendung eines Timers Allgemeine Java-Themen 8
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Problem bei der Verwendung von AES Allgemeine Java-Themen 2
J Port verwendung Allgemeine Java-Themen 13
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
X Wie 'teuer' ist die Verwendung des Stack Trace ? Allgemeine Java-Themen 8
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
W Verwendung von byte Allgemeine Java-Themen 9
L Verwendung? Allgemeine Java-Themen 2
D Fehlerhafte Thread Verwendung beim arbeiten mit Sockets Allgemeine Java-Themen 6
N allg. Frage zur Verwendung von this Allgemeine Java-Themen 3
G Verwendung von DataInputStream und URL Allgemeine Java-Themen 2
C Seltsame Konstanten (und Verwendung) Allgemeine Java-Themen 15
X Exception bei Verwendung von systray4j Allgemeine Java-Themen 5
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
T Wie in abstrakter Klasse den namen der implementierenden Klasse rausfinden? Allgemeine Java-Themen 5
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
C Problem mit abstrakter Klasse Allgemeine Java-Themen 4
F Statische Methode in abstrakter Superklasse definieren Allgemeine Java-Themen 4
O Methoden in abstrakter Klasse: public oder protected? Allgemeine Java-Themen 16
S private Vars in abstrakter Klasse nicht in der Unterklasse? Allgemeine Java-Themen 6
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben