2013-07-10 2 views
1

내 서브 클래스에서 수퍼 클래스의 메서드를 재정의하려고합니다. 하지만 내 프로그램에 어떤 변화가 있었 든간에. 수퍼 클래스의 메서드에 의해 진행된 결과를 여전히 나타냅니다. 그럼, 제 코드에 뭐가 잘못 됐나요?하위 클래스의 수퍼 클래스의 메서드를 재정의 할 수 없습니다.

getChildAge 메소드 및 getGreeting 메소드를 대체하려고합니다. 재정의 후 실제 값에 2를 더한 값을보고하는 14가 표시됩니다 (12가 설정된 경우). getGreeting 메서드의 경우 "I am the best"가 표시되어야합니다. 어떤 인수가 getGreeting 메소드로 전달되었는지에 관계없이

public class SchoolKid 
{ 
private String childName; 
private int childAge; 
private String childTeacher; 
private String greeting; 

//Constructor sets the childName,age,childTeacher and greeting. 
public SchoolKid(String childN,int a,String childT,String g) 
{ 
    childName = childN; 
    childAge = a; 
    childTeacher = childT; 
    greeting = g; 
} 

public void setChildName(String childN) 
{ 
    childName = childN; 
} 

public void setChildAge(int a) 
{ 
    childAge = a; 
} 

public void setChildTeacher(String childT) 
{ 
    childTeacher = childT; 
} 

public void setGreeting(String g) 
{ 
    greeting = g; 
} 

public String getChildName() 
{ 
    return childName; 
} 

public int getChildAge() 
{ 
    return childAge; 
} 

public String getChildTeacher() 
{ 
    return childTeacher; 
} 

public String getGreeting() 
{ 
    return greeting; 
} 
} 

public class ExaggeratingKid extends SchoolKid 
{ 
private int childAge; 
private String greeting; 


//Constructor sets the child name,age,childTeacher and greeting. 
public ExaggeratingKid(String childNAME,int childAGE, 
         String childTEACHER,String GREETING) 
{ 
    super(childNAME,childAGE,childTEACHER,GREETING); 
    } 

public void setChildAge(int a) 
{ 
    childAge = a; 
    super.setChildAge(childAge+2); 
} 

public void setGreeting(String g) 
{ 
    greeting = "I am the best."; 
    super.setGreeting("I am the best."); 
} 

public String toString() 
{ 
    String str; 
    str = "The child's name is "+super.getChildName()+ 
      "\nThe child's age is "+super.getChildAge()+ 
      "\nThe child's teacher is "+super.getChildTeacher()+ 
      "\nThe greeting is: "+super.getGreeting(); 
    return str; 
} 
} 
+2

슈퍼 메서드를 호출하면 어떤 이점이 우선 적용됩니까? toString()에서'super' 메소드를 호출하지 마라! 현재 객체 인'this' 객체의 메소드를 호출하십시오. 또한 인사말 또는 childAge 필드에 자식을 제공하지 마십시오. –

+0

이전에 해봤지만 나이가 0이고 인사말이 null임을 나타냅니다. – zihaow

답변

4

슈퍼 메서드를 호출하면 어떤 이점이 우선 적용됩니까? toString()에서 super 방법으로 전화하지 마세요. 현재 개체의 메서드 인 this 개체를 호출합니다. 또한 인사말 또는 childAge 필드에 자식을 제공하지 마십시오. 간단하게 할 대신

public void setGreeting(String g) 
{ 
    greeting = "I am the best."; 
    super.setGreeting("I am the best."); 
} 

:

public void setChildAge(int a) 
{ 
    childAge = a; 
    super.setChildAge(childAge+2); 
} 

이 대신 단지 수행합니다 :

@Override 
public void setChildAge(int a) 
{ 
    // childAge = a; // the child shouldn't have this variable 
    super.setChildAge(a + 2); 
} 

은 마찬가지로이 좋지 않습니다

예를 들어

, 이것은 말도 안돼

@Override 
public void setGreeting(String g) 
{ 
    // but what is g for??? 
    // greeting = "I am the best."; 
    super.setGreeting("I am the best."); 
} 

아니면 더 나은 :

@Override 
public String getGreeting() { 
    return "I am the best."; 
} 

와 자식 클래스의 인사 및 childAge 필드 제거. 하지만 이렇게하면 인사말이 설정되었는지 확인하기 위해 자녀의 생성자에서이를 호출해야합니다.

+0

및 문자열 g는 무엇입니까 ?? – nachokk

+0

@nachokk : 사실, 그가 그걸로 무엇을하고 싶은지 확실치 않습니다. 아니면 그냥 getGreeting()을 덮어 쓰는 것이 가장 좋습니다. –

+0

setter 메서드에 대한 upvote –

1

것은 다음 문제

public String toString() 
{ 
    String str; 
    str = "The child's name is "+super.getChildName()+ 
      "\nThe child's age is "+super.getChildAge()+ 
      "\nThe child's teacher is "+super.getChildTeacher()+ 
      "\nThe greeting is: "+super.getGreeting(); 
    return str; 
} 

당신이 super 멤버를 사용하는 모든 시간 :

여기 내 코드입니다. 이 메서드에서 super 키워드를 제거하십시오.

public String toString() 
{ 
    String str; 
    str = "The child's name is "+ getChildName()+ 
      "\nThe child's age is "+ getChildAge()+ 
      "\nThe child's teacher is "+ getChildTeacher()+ 
      "\nThe greeting is: "+ getGreeting(); 
    return str; 
} 
관련 문제