2016-08-30 3 views
-1

Ich habe drei Klassen namens ChildClass, BaseClass und Student. ChildClass erweitert BaseClass. Meine ChildClass erbt eine Methode namens DipslayName(), die den Namen des Schülers drucken sollte, aber es gibt mir den Nullwert. Wenn ich das Schülerobjekt in meiner ChildClass kommentiere, funktioniert es gut.Inherited Methode gibt mir den Nullwert

package com.techmahindra; 

public class ChildClass extends BaseClass{ 
    Student student = new Student(); 

    public static void main(String[] args) { 
     ChildClass child = new ChildClass(); 
     child.displayName(); 
    } 

    /*public void displayName(){ 
     setName(); 
     System.out.println(student.getName()); 
    }*/ 
    public void setName(){ 
     student.setName("Mahesh"); 
    } 
} 

Das ist die andere Klasse:

package com.techmahindra; 

import com.techmahindra.Student; 

public class BaseClass { 
    Student student = new Student(); 
    public void displayName(){ 
     setName(); 
     System.out.println(student.getName()); 
    } 
    public void setName(){ 
     student.setName("santhosh"); 
    } 
} 

Das ist die andere Klasse:

package com.techmahindra; 

public class Student { 
    private int id; 
    private String name; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 
+1

Sie haben zwei verschiedene 'student' Felder - ein in' BaseClass' und ein in 'ChildClass'. Ich vermute stark, dass du das nicht willst. –

+0

** 1 ** Sie haben die Funktion auskommentiert, also wie erwarten Sie, dass es funktioniert? ** 2 ** Es ist eine Void-Funktion, also wo ist es * gib * 'du null? ** 3 ** Beide Implementierungen der Funktion sind identisch. Was ist damit?! – Biffen

+0

Sie haben eine Membervariable 'student' in' BaseClass' sowie in 'ChildClass' definiert. Beachten Sie, dass dies zwei separate Variablen sind. – Jesper

Antwort

1

Die setName() Methode in Ihrem ChildClass den Namen des Schülers festlegt, die in Ihrem erklärt ChildClass.
Die displayName() zeigt den Namen des Studenten, wie es innerhalb der BaseClass deklariert ist.
Wenn Sie also die Deklaration student innerhalb der ChildClass entfernen, wird die setName Methode den Namen des korrekten Schülers festlegen.

Innerhalb Ihrer ChildClass haben Sie die überschriebene Methode displayName auskommentiert. Dies würde den Namen des Schülers korrekt anzeigen, wie er in Ihrer ChildClass deklariert ist.

Die Tatsache, dass beide Klassen eine Variable mit demselben Namen enthalten, führt zu Verwirrung.

-1

Ich habe verschiedene Referenznamen angegeben und so denkt es. Also hier versuche ich den Namen von student1 statt student2 zu nennen. Dies geschieht, wenn wir den gleichen Namen für Referenzen angeben;)

Paket com.techmahindra;

öffentliche Klasse ChildClass erweitert BaseClass { Student student2 = new Student();

public static void main(String[] args) { 

    ChildClass child = new ChildClass(); 
    child.displayName(); 
} 

/*public void displayName(){ 
    setName(); 
    System.out.println(student.getName()); 
}*/ 

public void displayName(){ //this method is inherited and not present in this class 

    setName(); 
    System.out.println(student1.getName()); 
} 

public void setName(){ 
    student2.setName("Mahesh"); 
} 

}