1. Das Zuordnen eines Methodenaufrufs zum Methodenkörper wird als
2 bezeichnet. Die Bindung zur Kompilierungszeit (statisch) bestimmt den Typ des referenzierten Objekts während der Programmkompilierungsphase
3. Laufzeitbindung (dynamische Bindung) bezieht sich auf die Bestimmung des tatsächlichen Typs des referenzierten Objekts während der Ausführung und den Aufruf seiner entsprechenden Methode entsprechend seinem tatsächlichen Typ
4 Zusätzlich zu statischen Methoden und endgültigen Methoden (Private Methoden sind endgültige Methoden), alle anderen Methoden sind spät gebunden und alle Methoden in Java erreichen Polymorphismus durch dynamische Bindung
5. Das Verhalten beim Zugriff auf eine bestimmte Domäne ist nicht mit Polymorphismus
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 jeder Domänenzugriffsvorgang von kompiliert und analysiert Der Prozessor ist also nicht polymorph. SubField enthält tatsächlich zwei Felder, die als Felder bezeichnet werden: ein eigenes und ein von SuperField geerbtes Feld. Normalerweise ist das Feld auf privat gesetzt und kann nicht direkt oder durch Aufruf einer Methode geerbt werden
6. Der Zugriff auf eine statische Methode ist nicht polymorph und nicht mit einem einzelnen Objekt verknüpft
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()); } }
Das obige ist der detaillierte Inhalt vonZugriff auf Felder und statische Methoden in Java ohne polymorphes Verständnis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!