2016-08-30 5 views
-1

私はChildClass、BaseClass、Studentの3つのクラスを持っています。 ChildClassはBaseClassを拡張します。私のChildClassは、dipslayName()という名前のメソッドを継承していますが、これは学生の名前を表示するはずですが、null値を与えています。私がChildClass内の生徒オブジェクトにコメントするとうまくいきます。継承されたメソッドは私にnull値を与えています

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"); 
    } 
} 

これは、他のクラスである:

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"); 
    } 
} 

これは、他のクラスである:あなたのChildClass

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

あなたは二つの異なる 'student'フィールド持っている - BaseClass''に1つ、 'ChildClass'で一つ。私はあなたがそれを望まないと強く疑う。 –

+0

** 1 **あなたはこの関数をコメントアウトしました。どのように機能すると思いますか? ** 2 ** void関数なので、どこにnullを与えるのですか? ** 3 **この関数の両方の実装は同じです。どうしたの?! – Biffen

+0

'BaseClass'と' ChildClass'にメンバー変数 'student'を定義しました。これらは2つの別々の変数であることに注意してください。 – Jesper

答えて

1

setName()方法が内で宣言された生徒の名前を設定し、あなたのChildClass
displayName()には、BaseClassに宣言されている生徒の名前が表示されます。
したがって、のChildClass内の宣言を削除すると、setNameメソッドは正しい生徒の名前を設定します。

ChildClass内で、オーバーライドされたメソッドdisplayNameをコメントアウトしました。これにより、ChildClass内で宣言されている生徒の名前が正しく表示されます。

両方のクラスに同じ名前の変数が含まれているということは、混乱を招きます。

-1

私は異なる参照名を付けました。これはそれがどう考えられるかです。ここで私はstudent2の代わりにstudent1という名前を呼んでいます。これは参照と同じ名前を付けるとどうなりますか)

package com.techmahindra;

public class ChildClass extends 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"); 
} 

}

関連する問題