2016-08-30 2 views
-1

ChildClass, BaseClass 및 Student라는 세 개의 클래스가 있습니다. ChildClass는 BaseClass를 확장합니다. My 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''에서 하나 ChildClass''하나입니다. 나는 당신이 그것을 원하지 않는다고 강력하게 의심합니다. –

+0

** 1 ** 함수를 주석 처리 했으므로 어떻게 작동하는지 어떻게 예상합니까? ** 2 ** void 함수입니다. 그래서 어디에서 null입니까? ** 3 ** 두 함수의 구현은 동일합니다. 그게 뭐야?! – Biffen

+0

'BaseClass'와'ChildClass'에 멤버 변수'student'를 정의했습니다. 이것들은 두 개의 분리 된 변수입니다. – Jesper

답변

1

setName() 방법 내에서 선언 된 학생의 이름을 설정하여 ChildClass.
BaseClass 내에 신고 된 학생의 이름을 표시합니다.
따라서 ChildClass 내의 student 선언을 제거하면 setName 메서드가 올바른 학생의 이름을 설정합니다.

ChildClass에서 재정의 된 메서드 displayName을 주석 처리했습니다. 이렇게하면 ChildClass 내에서 선언 된 학생의 이름이 올바르게 표시됩니다.

두 클래스가 같은 이름의 변수를 포함하고 있다는 사실은 혼란을 일으 킵니다.

-1

나는 다른 참조 이름을 부여했으며 이것이 어떻게 생각 하는지를 설명합니다. 여기서는 student2 대신 student1이라는 이름을 사용하려고합니다. 참조 용으로 같은 이름을 붙이면이 일이 일어납니다.)

package com.techmahindra;

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

}

관련 문제