Question 11 : 문법오류

Given:
23. Object [] myObjects = {
24.      new integer(12),
25.      new String(”foo”),
26.      new integer(5),
27.      new Boolean(true)
28. };
29. Arrays.sort(myObjects);
30. for( int i=0; i<myObjects.length; i++) {
31.      System.out.print(myObjects[i].toString());
32.      System.out.print(” “);
33. }

What is the result?

A. Compilation fails due to an error in line 23.
B. Compilation fails due to an error in line 29.
C. A ClassCastException occurs in line 29.
D. A ClassCastException occurs in line 31.
E. The value of all four objects prints in natural order.


[HeadFirst Java - p.242]
# 자바에서 모든 클래스는 Object라는 클래스를 확장한 것입니다. Object라는 클래스는 모든 클래스의 어머니, 즉 모든 것의 상위클래스입니다.
# 명시적으로 다른 클래스를 확장하지 않은 클래스는 자동으로 Object를 확장한 클래스로 정의됩니다.
     public class Dog extends Object {
     ...
# 초특급 클래스인 Object 클래스에 들어있는 대표적인 4가지 메소드
     - equals(Object o)
     - getClass()
     - hashCode()
     - toString()

[HeadFirst Java - p.250]
# 객체 레퍼런스를 실제 유형으로 캐스트하는 방법
     Object o = al.get(index);
     Dog d = (Dog) o;
     d.roam();
# Dog인지 잘 모르겠다면 instanceOf 연산자를 써서 확인하면 됩니다. 엉뚱한 클래스로 캐스트하면 실행 중에 ClassCastException이 나면서 프로그램이 멎어버립니다.
     if (d instanceOf Dog) {
          Dog d = (Dog) o;
     ...

Answer: C
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q013. import static  (0) 2008.04.03
Q012. 변수의 적용 범위  (0) 2008.04.01
Q010. HashSet  (0) 2008.03.30
Q009. 클래스 관계  (0) 2008.03.30
Q008. 접근제어자  (0) 2008.03.29

Question 5 : 클래스의 형변환

Given:
10. interface Foo {}
11. class Alpha implements Foo { }
12. class Beta extends Alpha {}
13. class Delta extends Beta {
14.      public static void main( String[] args) {
15.           Beta x = new Beta();
16.           // insert code here
17.      }
18. }

Which code, inserted at line 16, will cause a java.lang.ClassCastException?

A. Alpha a = x;
B. Foo f= (Delta)x;
C. Foo f= (Alpha)x;
D. Beta b = (Beta)(Alpha)x;

[Head First Java - p.263]
# 클래스를 만들 때 인스턴스를 만들 수 없게 하고 싶다면(즉, 그 클래스 유형의 객체를 만들 수 없게 하고 싶다면) abstract 키워드를 사용하면 됩니다.
# 추상 클래스에는 추상 메소드와 추상 메소드가 아닌 메소드를 모두 집어넣을 수 있습니다.
# 클래스에 추상 메소드가 하나라도 있으면 그 클래스는 추상 클래스로 지정해야 합니다.
# 추상 메소드에는 본체가 없으며 선언 부분은 세미콜론으로 끝납니다(중괄호를 쓰지 않습니다).
# 상속 트리에서 처음으로 나오는 구상 클래스에서는 반드시 모든 추상 메소드를 구현해야 합니다.
# 자바에 들어있는 모든 클래스는 직접 또는 간접적으로 Object(java.lang.Object)의 하위클래스입니다.
# 메소드를 선언할 때 인자, 리턴 유형을 Object로 지정해도 됩니다.
# 어떤 객체에 대해서 메소드를 호출하려면 그 객체를 참조하는 레퍼런스 변수 유형의 클래스(또는 인터페이스)에 그 메소드가 있어야만 합니다. 객체의 실제 유형하고는 무관합니다. 따라서 Object 유형의 레퍼런스 변수로는 Object 클래스에 정의되어 있는 메소드만 호출할 수 있습니다. (레퍼런스가 참조하는 객체의 유형과는 무관합니다.)
# Object 유형의 레퍼런스 변수는 캐스팅을 하지 않고는 다른 유형의 레페런스에 대입할 수 없습니다. 한 유형의 레퍼런스 변수를 하위 유형의 레퍼런스 변수에 대입하고 싶다면 캐스팅을 이용할 수 있습니다. 하지만 힙에 들어있는 객체가 캐스팅 호환 가능한 유형이 아니라면 실행 중에 캐스팅에 실패할 수도 있습니다.

[Internet]
http://blog.naver.com/sjmpropose?Redirect=Log&logNo=44466628
객체 형변환, 상속 관계에서의 생성자

http://raoo.tistory.com/entry/추상클래스와-클래스-형변환에-대한-간단한-예제
추상클래스와 클래스 형변환에 대한 예제

Answer: B
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q007. 접근제어자  (0) 2008.03.25
Q006. Format 클래스  (0) 2008.03.24
Q004. 예외처리  (0) 2008.03.23
Q003. 실행문  (0) 2008.03.23
Q002. 실행문  (0) 2008.03.23

+ Recent posts