2011-10-04 6 views
1

AP CS 시험을 위해 공부하고 있으며 내 책의 OOP 섹션에서이 연습 문제를 발견했습니다. 다음 두 클래스가 제공됩니다.OOP AP CS Practice

package chap4q9; 

public class Person 
{ 
    private int age; 
    public Person(int a) 
    { 
     age = a; 
    } 
    public String toString() 
    { 
     return "Age: " + age + "\n"; 
    } 
} 

package chap4q9; 

public class Student extends Person 
{ 
    private double gpa; 
    public Student(int a, double g) 
    { 
     super(a); 
     gpa = g; 
    } 
    public String toString() 
    { 
     return super.toString() + "GPA: " + gpa; //This was where the missing code was 
    } 
} 

그리고 다음은이 두 클래스를 호출하는 클라이언트 프로그램입니다.

package chap4q9; 

public class Chap4Q9 
{ 
    public static void main(String[] args) 
    { 
     Student kathy = new Student(17, 3.85); 
     System.out.println(kathy); 
    } 
} 

마지막으로, 출력은 다음과 같습니다

나이 : 17

GPA : 그냥 경우에 당신이 궁금해 3.85

, 실제로 시대 사이에 선이있을 안된다 그리고 출력물에 GPA가있는 것은 이상한 포맷팅이었습니다.

목표는 두 번째 toString 메서드에서 누락 된 코드를 바꾸는 것이 었습니다 (위 코드에서 누락 된 코드에 대한 정답이 삽입되었지만 위치를 표시했습니다). 나는 그 책이 잘못되었다고 생각했지만 코드를 실행하고 같은 결과를 얻었다. 나는 kathy가 위치한 메모리 위치를 단순히 인쇄 할 것이라고 생각했다. 그리고 그 출력을 얻으려면 kathy.toString()을 인쇄해야 할 것이다. 그러나 kathy를 인쇄하는 것은 Student 클래스에서 toString 메서드를 실행하는 것으로 보입니다. 내 질문은, 왜 학생 개체, 캐시, 그 출력을 받고 단순히 메모리 위치가 아닌 인쇄입니다. 모든 답변을 미리 감사드립니다.

답변

2

기본적으로 System.out.println이 객체의 toString() - 메소드를 호출하기 때문입니다. 귀하의 경우에는 자식 클래스에서 자신의 toString을 구현 했으므로이 클래스가 사용됩니다.

Person 클래스와 Student 클래스에 toString이없는 경우에만 Object 클래스의 toString이 호출되어 클래스 이름과 16 진수로 구성된 객체 식별 문자열을 출력합니다 오브젝트의 hashCode의 표현

은 자세한 내용은 객체 클래스를위한 Javadoc을 참조하십시오 http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#toString()는 기본적으로 당

+1

실제로'null' 매개 변수가 주어진 경우''null ''을 출력하는'String.valueOf (...)'를 호출합니다. – Gandalf

+0

+1이 mcfinnigan의 경우 -1입니다. 여기서 우리는 훌륭한 대답과 완전히 쓸모없는 답변의 차이를 봅니다. 좋은 물건 로버트 M. – Brendan

0

나는 어딘가에 책에서 System.out.println을 할 때 자동으로 toString 메서드를 호출한다고 말한다.