2012년 10월 12일 금요일

OCJP 문제풀이 - Question 11

QUESTION 11
Click the Exhibit button.
What is the result?

public class Person {
  String name = "No name";
  public Person(String nm) { name = nm; }
}

public class Employee extends Person {
  String empID = "0000";
  public Employee(String id) { empID = id; }
}

public class EmployeeTest {
  public static void main(String[] args){
    Employee e = new Employee("4321");
    System.out.println(e.empID);
  }
}

A. 4321
B. 0000
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 18.

Answer: D
Section: All

Explanation/Reference:


상속시 생성자에 관련된 문제이다.

자식 클래스의 생성자가 실행될때는 항상 부모 클래스의 기본 생성자를 실행한다.
즉, compiler는 18 line Employee(String) 생성자에 가장 먼저
super() 라는 부모의 생성자를 실행하는 명령어를 자동으로 삽입하는데,
부모클래스에는 기본생성자가 존재하기 않기때문에 오류가 발생한다.

이를 해결하기 위해서는 부모클래스에 아무 인자를 가지지 않는 Person() 생성자를 만들거나,
Employee 클래스의 Employee(Stirng id) 생성자의 첫번째 line에 super([String인자])를 넣어야한다.


블로그 보관함