Überschreiben von Methoden

tanechka

Bekanntes Mitglied
Hallo,
ich habe Frage zum Thema "Covariant returns" beim Überschreiben von den Methoden. Ich habe ein Beispiel, was ich nicht nachvollziehen kann:
Java:
class Parent {
    Integer get() {
        return 1;
    }
}

class Child extends Parent {
    Number get() {
        return 2;
    }
}

public class Test {
    public static void main(String[] args) {
        Parent yo = new Child();
        System.out.println(yo.get());
    }
}

Es gibt einen Kompilierungsfehler in diesem Fall. Obwohl Integer ein Subclass von Number ist. Genauso wie hier auch:
Java:
class Parent {
    Number get() {
        return 1;
    }
}

class Child extends Parent {
    Integer get() {
        return 2;
    }
}

public class Test {
    public static void main(String[] args) {
        Parent yo = new Child();
        System.out.println(yo.get());
    }
}

Könntet ihr mir bitte helfen, die Regeln dafür zu verstehen?
 
Zuletzt bearbeitet von einem Moderator:

kaoZ

Top Contributor
Wie und woher kommst du darauf das Number eine Subklasse von Integer ist ?

Das hier wäre korrekt
Java:
public class Parent{
	
	public int get(){
		return 1;
	}
}

class Children extends Parent{
	
	@Override
	public int get(){
		return 2;
	}
}

zudem sollte das Überschreiben von Methoden mit der @Override Annotation gekennzeichnet werden damit man nicht ausversehen eine Bestehende Methode überlädt.
 
Zuletzt bearbeitet:

tanechka

Bekanntes Mitglied
Number ist eine abstrakte Klasse und die ist die Superklasse von Integer. Aufgrunddessen habe ich mir gedacht, das wäre auch "covariante return" für die Klasse.
 

kaoZ

Top Contributor
Dann sehe das ganze aber so aus , nicht wie in deinem Beispiel ;)

Java:
public class Parent{
	
	Number get(){
		return 1;
	}
}

class Children extends Parent{
	
	@Override
	Integer get(){
		return 2;
	}
}

ungetestet.

Das hier funktioniert fehlerfrei übrigends
Java:
public class Parent{
	
	Number get(){
		return 1;
	}
	
	public static void main(String[] args){
		Parent p = new Parent();
		System.out.println(p.get());
		
		Children c = new Children();
		System.out.println(c.get());
	}
}

class Children extends Parent{
	
	@Override
	Integer get(){
		return 2;
	}
}

Du kannst einfach keinen Supertyp als Rückgabe deklarieren wenn du in der Superklasse schon mit einer Subklasse arbeitest.
 
Zuletzt bearbeitet:

tanechka

Bekanntes Mitglied
ja, das wird kompiliert. Nur dieses Beispiel wird nicht kompilieren:
Code:
    class Parent {
    Integer get() {
    return 1;
    }
    }
     
    class Child extends Parent {
    Number get() {
    return 2;
    }
    }
     
    public class Test {
    public static void main(String[] args) {
    Parent yo = new Child();
    System.out.println(yo.get());
    }
    }
return parameter von dem Subclass soll wahrscheinlich der Subclass von dem Superclass return type.
 

Natac

Bekanntes Mitglied
Es wird daher nicht kompiliert, da nicht nur Integer eine Number ist, sondern bspw. auch Double.

In der Superklasse steht aber, dass get() einen Integer zurückgibt. Darum kann die Kindklasse nicht anfangen, das zu verallgemeinern.

Folgends geht ja auch nicht (vielleicht ist das offensichtlicher):

Java:
class Parent {
   Integer get() {return 1;}
}
class Child extends Parent {
    Object get() {return 2;}
}

Ist die Superklasse hingegen schon allgemein (bspw: Number), so kann die Kindklasse da gerne konkreter werden (bspw. Integer), da damit die Signatur ja nicht verletzt wird.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
T Überschreiben von Methoden erzwingen Allgemeine Java-Themen 20
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
C Überschreiben mit kontravariante Parameter Allgemeine Java-Themen 13
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
M Überschreiben der clone()-Methode Allgemeine Java-Themen 10
T Direktes Überschreiben Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
M Überschreiben? Allgemeine Java-Themen 3
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
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
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
MiMa Rekursive Methoden Allgemeine Java-Themen 3
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
K Auf Methoden der Runnable Klasse zugreifen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben