In Java können wir nicht eine endgültige Methode überschreiben, aber ist es möglich, zu überlasten?ist es möglich, eine endgültige Methode zu überladen
Antwort
Ja, das Überladen einer endgültigen Methode ist vollkommen legitim.
Zum Beispiel:
public final void doStuff(int x) { ... }
public final void doStuff(double x) { ... }
Ja Es ist möglich.
Sie können diese Art von Dingen untersuchen, indem Sie kleine Java-Klassen schreiben.
class TestClass{
final public void testMethod(){
}
final public void testMethod(int i){
}
}
JA, warum nicht? Es ist so legal wie nicht-finale Methoden zu überladen.
Aber man kann sie nicht außer Kraft setzen (Sie wissen es bereits).
ZB:
public final void func(String x) {/* code */}
public final void func(double x) { /* more code */ }
public final void func(int x) { /* yeah I have still more code */ }
Warum eine Stimme abgeben? –
ja letzte Methode Überlastung ist möglich, in java.As sind endgültige Verfahren beschränkt nicht die Methoden außer Kraft zu setzen.
Beim Überladen der Argumentliste muss ein anderer Typ der Überlademethode angegeben werden.
Ja, sehr viel möglich.
Ein kleines Programm, um es zu zeigen:
class A{
final void foo(){ System.out.println("foo ver 1 from class A"); }
final void foo(int a){ System.out.println("foo ver 2 from class A"); }
}
class B extends A{
final void foo(long l){ System.out.println("foo ver 3 from class B"); }
// final void foo(){ System.out.println("foo ver 1 from class A"); } NOT ALLOWED
}
public class Test {
public static void main(String [] args){
B obj = new B();
obj.foo();
obj.foo(1);
obj.foo(1L);
}
}
Ausgang:
foo ver 1 from class A foo ver 2 from class A foo ver 3 from class B
Ja, aber bewusst sein, dass dynamischer Dispatch vielleicht nicht tun, was Sie erwarten! Schnell Beispiel:
class Base {
public final void doSomething(Object o) {
System.out.println("Object");
}
}
class Derived extends Base {
public void doSomething(Integer i) {
System.out.println("Int");
}
}
public static void main(String[] args) {
Base b = new Base();
Base d = new Derived();
b.doSomething(new Integer(0));
d.doSomething(new Integer(0));
}
Dies drucken:
Object Object
Ja, da beide Objekte, die in der Hauptmethode erstellt wurden, den höchsten Vaterdaten-Typ 'Base' erhalten, werden beide" * Objekt * "ausgeben. Da die "Derived" -Instanz eine "* ist a *" - Beziehung mit der Klasse "Base" hat, kann dieses Objekt in "Abgeleitet" umgewandelt werden, um die Methode aufzurufen, die "* Int *" ausgibt. –
@IanCampbell Exactly '((Derived) d) .doSomething (1);' –
Dynamischer Versand geschieht, wenn Sie Methoden überschreiben, nicht mit Überladung. – sharhp
ja wir die letzten Methoden überlasten
Ja:
class a {
final void method1(int a,int b) {
System.out.println("super class");
int d = a+ b;
System.out.println(d);
}
}
class b extends a{
final void method1(int a) {
System.out.println("sub class");
System.out.println(a);
}
}
public class c {
public static void main(String ar[]) {
b m = new b();
m.method1(10);
}
}
Sie sollten Ihren Code formatieren und etwas hinzufügen, um Ihre Antwort zu erklären. – Jonathan
- 1. Endgültige Methode überschreiben
- 2. Ist es möglich, Operatoren in C zu überladen?
- 3. Ist es möglich, Clojure Multi-Methoden auf Arity zu überladen?
- 4. Ist es möglich, die multiple Vergleichssyntax in Python zu überladen?
- 5. Ist es möglich, diese Methode zu beschleunigen?
- 6. Ist es möglich, benutzerdefinierte endgültige Klassen im Ruhezustand zuzuordnen?
- 7. VS2010 Profiler: Ist es möglich, eine bestimmte Methode zu profilieren?
- 8. Ist es möglich, eine ListViewGroup zu erstellen
- 9. Mocking eine endgültige Methode mit PowerMock + EasyMock
- 10. Gibt es eine Möglichkeit, + = in Python zu überladen?
- 11. In F #. Ist es möglich, den Konstruktor eines abstrakten Typs zu überladen?
- 12. Ist es möglich, eine überschriebene Methode vom Selbsttyp aufzurufen?
- 13. ist es möglich, überschriebene Methode als endgültig zu markieren
- 14. Ist es möglich, eine Methode aus einer Objektdefinition Konstruktor Funktion
- 15. Ist es möglich, Groovy-Methode für bestehendes Objekt zu ersetzen?
- 16. Webservice-Methode überladen
- 17. Ist es möglich, eine HttpPost Action-Methode von @ Html.ActionLink aufzurufen?
- 18. Ist es möglich, eine Methode nur einmal auszuführen?
- 19. Ist es möglich, die Methode name dieser Aufrufe eine andere Methode zu bekommen?
- 20. Ist es möglich, benannte Methode innerhalb eines Anrufs zu Where?
- 21. Ist es möglich, die verweisende Methode in VB.NET zu erhalten?
- 22. Mocking überladen Methode
- 23. DebuggingClassWriter überschreibt endgültige Methode besuchen
- 24. Überladen einer Methode für Standardargumente
- 25. Überladen jQuery Colorbox-Methode?
- 26. Methode überladen mit Typen C#
- 27. Methode überladen mit Routing
- 28. Vererbung und Methode überladen
- 29. Ist es möglich, einen Aufruf von Vars (Objekt) in Python zu überladen?
- 30. Ist es möglich, Global.asax zu debuggen?
Wenn man es versucht, was passiert ist? –