Der folgende Editor bringt Ihnen einen Artikel, der auf der Tatsache basiert, dass der Zugriff auf Felder und statische Methoden in Java keinen Polymorphismus aufweist (Erklärung anhand von Beispielen). Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf.
1 Das Verknüpfen eines Methodenaufrufs mit dem Methodenkörper wird als
2 bezeichnet. Typ des referenzierten Objekts
3. Laufzeitbindung (dynamische Bindung) bedeutet, den tatsächlichen Typ des referenzierten Objekts während der Ausführung zu bestimmen und seine entsprechende Methode entsprechend seinem tatsächlichen Typ aufzurufen
4 . Mit Ausnahme statischer Methoden und endgültiger Methoden (private Methoden sind endgültige Methoden) Alle Methoden in Java erreichen Polymorphismus durch dynamische Bindung
5 ist nicht polymorph
package polymorphism; class SuperField { public int field = 1; public int getField() { return field; } } class SubField extends SuperField { public int field = 2; public int getField() { return field; } public int getSuperField() { return super.field; } } public class FieldPolymorphism { public static void main(String[] args) { SuperField sup = new SubField(); System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField()); SubField sub = new SubField(); System.out.println("sub.field = " + sub.field + ", sub.getField() = " + sub.getField() + ", sub.getSuperField() = " + sub.getSuperField()); } }
Ausgabeergebnis:
sup.field = 1, sup.getField() = 2
sub.field = 2, sub.getField() = 2, sub.getSuperField() = 1
Wenn das SubField-Objekt in eine Super-Referenz konvertiert wird, wird jede Feldzugriffsoperation vom Compiler analysiert, sodass es nicht polymorph ist enthält tatsächlich zwei Felder, die Felder genannt werden: ein eigenes und ein von SuperField geerbtes Feld
Normalerweise ist das Feld auf privat gesetzt und kann nicht direkt oder durch Vererbung, Zugriff durch Aufrufmethoden
6. Auf ein statisches Feld zugreifen Methode ist nicht polymorph und ist keinem einzelnen Objekt zugeordnet
package polymorphism; class Super { public static String staticMethod() { return "Super staticMethod()"; } } class Sub extends Super { public static String staticMethod() { return "Sub staticMethod()"; } } public class StaticPolymorphism { public static void main(String[] args) { Super sup = new Sub(); System.out.println(sup.staticMethod()); System.out.println(Sub.staticMethod()); } }
Ausgabeergebnis:
Super staticMethod()
Sub staticMethod()
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Zugriffs auf Felder und statische Methoden ohne Polymorphismus in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!