2017-10-07 3 views
0

Dieser folgende Code gibt die Ausgabe als:Was passiert, wenn dem Elternklassenobjekt ein Kindklassenobjekt zugewiesen wird?

Output: 
    Animal 
    Dog 
    Animal 

Ich bin verwirrt, warum "a.type" Ausgänge als "Animal" auch nach der Abtretung "a = b". Wieso ist es so?

Eine weitere Beobachtung war, wenn ich Variable nicht deklarieren - "String-Typ" in Dog-Klasse. Dann bekomme ich die Ausgabe als:

Output: 
     Dog 
     Dog 
     Dog 

Mein Code:

//Parent class 
    class Animal { 
     String type; 
     public Animal(){ 
      this.type= "Animal"; 
     } 

    } 

    //Child class 
    class Dog extends Animal { 

     String type; 
     public Dog(){ 
      this.type ="Dog"; 
     } 

    } 

    //Main Class To Test 
    class TestDog{ 


      Animal a = new Animal(); 
      Dog b = new Dog();   
      Animal c = new Dog();  

      a = b; 
      System.out.println(a.type); 
      System.out.println(b.type); 
      System.out.println(c.type); 


    } 
+0

' "Was passiert, wenn Eltern-Klasse-Objekt untergeordneten Klasse Objekt zugeordnet"' - * Ähem *, bitte Verstehen Sie, dass Sie einem Elterntyp *** Variable *** ein Kindklassenobjekt zuweisen. Dies mag wählerisch erscheinen, aber es ist eine wichtige Unterscheidung und bringt den Kern davon, wie Java OOPs implementiert und * Referenz * -Variablen verwendet. Auch der Elterntyp könnte nicht einmal eine Klasse sein, sondern könnte eine Schnittstelle (ein "reiner" Typ) sein. –

+0

Sie fügen sowohl der Eltern- als auch der Kindklasse ein Typfeld hinzu. Nicht. Fügen Sie es nur dem Elternteil hinzu. Mach es geschützt oder gib es Getter und Setter. –

Antwort

0

Zunächst wird ein didaktisch. Sie geben in Ihrer Kachel Folgendes an:

Was passiert, wenn dem übergeordneten Klassenobjekt ein untergeordnetes Klassenobjekt zugewiesen wird?

Bitte haben Sie Verständnis dafür, dass Sie ein Unterklassenobjekt einer übergeordneten Variablen zuweisen. Dies mag wählerisch erscheinen, aber es ist ein wichtiger Unterschied und bringt den Kern davon, wie Java OOPs implementiert und Referenzvariablen verwendet. Auch der Elterntyp könnte nicht einmal eine Klasse sein, sondern könnte eine Schnittstelle (ein "reiner" Typ) sein.

Zu Ihrer Verwirrung fügen Sie der Eltern- und der Kindklasse ein Typfeld hinzu. Nicht, da Felder nicht überschrieben werden. Fügen Sie es nur dem Elternteil hinzu. Mach es geschützt oder gib es Getter und Setter.

Zum Beispiel:

class Animal { 
    private String type; 

    public Animal() { 
     this.type = "Animal"; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

} 

// Child class 
class Dog extends Animal { 

    String type; 

    public Dog() { 
     setType("Dog"); 
    } 

} 

// Main Class To Test 
class TestDog { 
    public static void main(String[] args) { 

     Animal a = new Animal(); 
     Dog b = new Dog(); 
     Animal c = new Dog(); 

     a = b; 
     System.out.println(a.getType()); 
     System.out.println(b.getType()); 
     System.out.println(c.getType()); 
    } 

} 
+0

Danke für die Antwort !! Das löste meine Verwirrung. – Sravani

Verwandte Themen