Überschreiben/Überladen Methode

O2016

Bekanntes Mitglied
Gibt es einen Unterschied ob ich eine Klassenmethode/Variable oder eine Instanzmethode/Variable überschreibe bzw. überlade?
 
Ja. Variablen, bzw. Attribute, bzw. Felder (einer Klassen oder Instanz) kann man nicht überschreiben (im Sinne von Polymorphie / dynamic Dispatch), sondern nur verdecken. Genauso können Klassenmethoden nicht überschrieben werden, sondern auch nur verdeckt werden. Methoden (einer Klassen oder Instanz) generell können überladen werden, das heißt, es gibt mehrere Methoden mit demselben Namen in derselben Klasse aber mit unterschiedlichen Parametern/Parametertypen. Instanzmethoden können dann noch überschrieben werden, das heißt, man definiert in einer Subklasse dieselbe Methode mit gleichem Namen und gleichen Parametertypen nochmal wie in einer Oberklasse, was dazu führt, dass beim Aufruf dieser Methode auf einem Subklassenobjekt nicht mehr die Oberklassenmethode aufgerufen wird, sondern die überschreibende Methode.
Es ist wichtig, den Unterschied zwischen überladen und überschreiben zu kennen.
 
Noch etwas. was macht es für einen Sinn ein Objekt von einem Interface zu erstellen?
Bsp:
X name = new B

Bsp:
Klasse A implements Interface X
Klasse B extends A
 
Ich möchte hier nochmal zusammenfassen:
(benötigt kein Objekt, gilt für die komplette Klasse, Bsp ein Zähler)
Klassenmethode = statische Methode mit dem Namen static vorne
Klassenattribute = statisches attribut mit dem Namen static..

Instanzmethode = ganz normale methode innerhalb einer Klasse
Instanzattribute = private int a = 4;
verstehe ich das richtig?
 
Noch etwas. was macht es für einen Sinn ein Objekt von einem Interface zu erstellen?
Bsp:
X name = new B

Bsp:
Klasse A implements Interface X
Klasse B extends A

Der Vorteil ist, dass die konkrete Implementation der Variablen "name" unterschiedlich sein kann:

X name = new B();
name = new A();

Alle Methoden des Interfaces stehen damit unabhängig von der konkreten Implementation zur Verfügung.
 

Zurück
Oben