Heim  >  Artikel  >  Java  >  Ausführliche Erläuterung des Zugriffs auf Felder und statische Methoden ohne Polymorphismus in Java

Ausführliche Erläuterung des Zugriffs auf Felder und statische Methoden ohne Polymorphismus in Java

黄舟
黄舟Original
2017-10-10 10:19:541745Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn