2017-07-27 2 views
1

Ich habe einige der zugehörigen Beiträge zu diesem Thema gelesen und ich habe gelernt, dass wenn wir eine Variable mit demselben Namen in einer Unterklasse erstellen, dies Verbergen genannt wird.Auswirkungen des Typs "Gegebener Datentyp" Übergeordnete Membervariablen

 

    class A { 
     int i = 10; 

     public void printValue() { 
      System.out.print("Value-A"); 
      System.out.println(i); 
     } 
    } 

    class B extends A { 
     int i = 12; 

     public void printValue() { 
      System.out.print("Value-B"); 
      System.out.println(i); 
     } 
    } 

    public class Test { 
     public static void main(String args[]) { 
      A a = new B(); 
      a.printValue(); 
      System.out.print(a.i); 
     } 
    } 

Wenn I instanziieren Klasse B mit Typ-A und die Druckelementdaten A a = new B(); System.out.printin (A.I.) Der Ausgang 10 ist (der Wert der übergeordneten Klasse Elementdaten).

Aber wenn ich instanziiert Klasse B als Typ B, B a = new B(); System.out.println (a.i) ist 12. (Der Wert der übergeordneten Klassenmitgliedsdaten)

Ich würde gerne wissen, wie sie unterschiedlich sind.

+0

sehr eng schließen Frage https://StackOverflow.com/Questions/15513467/Polymorphism-with-Instance-Variables – agurylev

Antwort

1

Polymorphismus gilt nur auf Methoden. Variablen binden immer noch an den Typ. Sie können Variablen nicht überlagern. Das ist der Grund, warum Sie unterschiedliche Ausgabe sehen, wenn Sie den Typ ändern.

In einfachen Worten, wenn Sie

schreiben
A a=new B(); 

Nur zur Erinnerung, Variablen auf die linke Seite und Methoden binden wird von der rechten Seite durchführen.

2

Variablen auf die Referenz binden, nicht an das Objekt angelegt. In Ihrem Beispiel A a = new B(); Hier a ist ein Verweis auf die variabel bindet vom Typ A. Und das erstellte Objekt hat den Typ B, an den Methoden gebunden sind. Aus diesem Grund werden Werte für Referenzvariablen ausgewählt. Dies wird Datenverbergung genannt. Denn wenn wir gleiche Variable in der Unterklasse zu erstellen, Wert der Variablen der Unterklasse wird unter super Klassenvariable versteckt. Ich hoffe es hilft.

+0

Ja, Sie haben Recht und es hat funktioniert. –