ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
2126
2126
EMPFEHLEN
-
03.08.08 14:28 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Methoden überladen / überschreiben auf Basis eines unterschiedlichen Return types.
Gerade ist mir dieser Artikel untergekommen:
http://today.java.net/pub/a/today/20...erloading.html
Hier wird gezeigt wie man (mit ein wenig Aufwand) mehrere Methoden mit den gleichen Parametertypen aber unterschiedlicher Return-Typen angeben kann.
Unter der Haube macht der Java Compiler einen ahnlichen Trick generische Methoden bei der Implementierung passend zu typen,
in dem sogenannte Bridge Methods eingefügt werden.
http://www.tutorials.de/forum/java/2...e-methods.html
Beispiel:
Ausgabe:Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
/** * */ package de.tutorials; import java.lang.reflect.Method; /** * @author Tom * */ public class BridgeMethodExample { /** * @param args */ public static void main(String[] args) { for(Method method : Foo.class.getDeclaredMethods()){ System.out.printf("Method: %s is synthetic: %s / is bridge: %s \n", method.toString(),method.isSynthetic(),method.isBridge()); } } static interface IFoo<T>{ T op(); } static class Foo implements IFoo<Integer>{ @Override public Integer op() { return null; } } }
Code :1 2
Method: public java.lang.Integer de.tutorials.BridgeMethodExample$Foo.op() is synthetic: false / is bridge: false Method: public java.lang.Object de.tutorials.BridgeMethodExample$Foo.op() is synthetic: true / is bridge: true
Hier ein Beispiel wie man Methoden mit unterschiedlichen Return Types überschreiben kann:
(Das geht seit Java 5. Der Return Typ der überschreibenden Methode muss ein zu dem Return Type der
überschriebenen Methode kompatibel sein)
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
/** * */ package de.tutorials; /** * @author Tom * */ public class ReturnTypeCovariance { /** * @param args */ public static void main(String[] args) { System.out.println(new A().op()); System.out.println(new B().op()); System.out.println(new C().op()); A a = new C(); System.out.println(a.op()); } static class A{ Number op(){ return 4711; } } static class B extends A{ @Override Long op(){ return 1234L; } } static class C extends A{ @Override Double op(){ return Math.PI; } } }
Ausgabe:
Code :1 2 3 4
4711 1234 3.141592653589793 3.141592653589793
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
03.08.08 15:26 #2
Jo, das funktioniert, solang die Rückgabetypen der überschreibenden Methoden Subklassen des definierten Rückgabetyps sind. Man spart sich dadurch in vielen Fällen den cast auf einen konkreten Typ, wenn der Supertyp schon eine Methode deklariert hat die einen recht abstrakten Rückgabetyp hat.
REINHAUN!In theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
Ähnliche Themen
-
Methoden überladen - wo steckt der Denkfehler?
Von Cherrycoke im Forum JavaAntworten: 4Letzter Beitrag: 11.05.10, 15:27 -
überladen von virtuelle methoden
Von AlexanderKiebler im Forum C/C++Antworten: 6Letzter Beitrag: 30.12.08, 15:29 -
Vererbung und Überladen von virtuellen Methoden (Polymorphie)
Von RuFFnEcK im Forum C/C++Antworten: 14Letzter Beitrag: 20.01.06, 10:51 -
Überschreiben/Überladen von Methoden
Von MinaM im Forum JavaAntworten: 2Letzter Beitrag: 26.08.05, 16:38 -
Axis Problem beim Methoden überladen
Von cham im Forum JavaAntworten: 1Letzter Beitrag: 25.01.05, 18:13






Zitieren
Login





