Question 21 : 추상클래스

Given:
11. public abstract class Shape {
12.     int x;
13.     int y;
14.     public abstract void draw();
15.     public void setAnchor(int x, int y) {
16.         this.x = x;
17.         this.y = y;
18.     }
19. }

and a class Circle that extends and fully implements the Shape class.
Which is correct?

A. Shape s = new Shape();
    s.setAnchor(10,10);
    s.draw();
B. Circle c = new Shape();
    c.setAnchor(10,10);
    c.draw();
C. Shape s = new Circle();
    s.setAnchor(10,10);
    s.draw();
D. Shape s = new Circle();
    s->setAnchor(10,10);
    s->draw();
E. Circle c = new Circle();
    c.Shape.setAnchor(10,10);
    c.Shape.draw();


[HeadFirst Java - p.234]
어떤 클래스의 인스턴스를 만들 수 없게 하는 간단한 방법이 있습니다. 즉 특정 유형에 대해 "new" 키워드를 쓸 수 없게 하는 방법입니다. 클래스를 abstract로 지정하면 컴파일러에서 그 유형의 인스턴스를 만드는 코드를 허용하지 않습니다. 하지만 그 추상 유형(abstract type)을 레퍼런스로 사용할 수 있습니다. 사실 그렇게 레퍼런스로 사용하는 것이 바로 이런 추상 클래스를 만드는 핵심적인 이유 중의 하나라고 볼 수 있습니다.


Answer: C
반응형

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

Q020. 내부 무명 클래스  (0) 2008.04.30
Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04

Question 20 : 내부 무명 클래스

Given:
1. interface TestA { String toString(); }
2. public class Test {
3.     public static void main(String[] args) {
4.         System.out.println(new TestA() {
5.             public String toString() { return “test”; }
6.         });
7.     }
8. }

What is the result?

A. test
B. null
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 1.
E. Compilation fails because of an error in line 4.
F. Compilation fails because of an error in line 5.


Answer : A
반응형

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

Q021. 추상클래스  (1) 2008.05.03
Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Question 19 : 클래스의 형변환

Given:
1. class TestA {
2.      public void start() { System.out.println(”TestA”); }
3. }
4. public class TestB extends TestA {
5.      public void start() { System.out.println(”TestB”); }
6.      public static void main(String[] args) {
7.           ((TestA)new TestB()).start();
8.      }
9. }

What is the result?

A. TestA
B. TestB
C. Compilation fails.
D. An exception is thrown at runtime.


Answer: B
반응형

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

Q021. 추상클래스  (1) 2008.05.03
Q020. 내부 무명 클래스  (0) 2008.04.30
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Question 18  : 인터페이스

Given:
1. public interface A {
2.      String DEFAULT_GREETING = “Hello World”;
3.      public void method1();
4. }

A programmer wants to create an interface called B that has A as its parent. Which interface declaration is correct?

A. public interface B extends A { }
B. public interface B implements A { }
C. public interface B instanceOf A { }
D. public interface B inheritsFrom A { }


[HeadFirst Java - p.258]
# 인터페이스 정의
     public interface Pet {...}
# 인터페이스 구현
     public class Dog extends Canine implements Pet {...}


//A를 부모로 하여 B라는 인터페이스를 만들려고 한다. 인터페이스의 정의가 올바른 것은?
Answer: A
반응형

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

Q020. 내부 무명 클래스  (0) 2008.04.30
Q019. 클래스의 형변환  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Q015. 무명클래스의 형태  (0) 2008.04.04
Question 17 : import static

Given:
1. package sun.scjp;
2. public enum Color { RED, GREEN, BLUE }

1. package sun.beta;
2. // insert code here
3. public class Beta {
4.      Color g = GREEN;
5.      public static void main( String[] argv)
6.      { System.o ut.println( GREEN); }
7. }

The class Beta and the enum Color are in different packages.

Which two code fragments, inserted individually at line 2 of the Beta declaration, will allow this code to compile? (Choose two.)

A. import sun.scjp.Color.*;
B. import static sun.scjp.Color.*;
C. import sun.scjp.Color; import static sun.scjp.Color.*;
D. import sun.scjp.*; import static sun.scjp.Color.*;
E. import sun.scjp.Color; import static sun.scjp.Color.GREEN;

[HeadFirst Java - p.261]
# 패키지가 원래 이름 충돌을 방지하기 위한 용도로 만들어진 것은 아니지만, 이름 충돌을 방지하는 것도 패키지의 핵심적인 기능 가운데 하나라고 할 수 있습니다.
# 클래스를 package에 집어넣는 방법
     1. 패키지 명을 결정합니다.
          - "com.headfirstjava"를 예로 들면, 클래스 명이 'PackageExercise'라면
          - 전체이름은 "com.headfirstjava.PackageExercise"
     2. 클래스에 package 선언문을 집어넣습니다.
          - 소스코드 파일의 첫번째 선언문이어야 한다.
          - 소스 파일 하나에 들어있는 클래스는 모두 같은 패키지에 들어있어야 한다.
          - package 선언문이 하나밖에 들어갈 수 없기 때문이다.
     3.디렉토리 구조를 패키지 구조에 맞게 설정
          - PackageExercise의 소스코드는
          - com이라는 디렉토리 밑에 있는 headfirstjava라는 디렉토리 밑에 위치

[HeadFirst Java - p.261]
# 정적 임포트를 사용한 코드
     import static java.lang.System.out;
     import static java.lang.Math.*;
     class WithStatic {
          public static void main(String [] args) {
               out.println("sqrt " + sqrt(2.0));
               out.println("tan " + tan(60));
          }
     }

Answer: CE
반응형

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

Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q016. 내부클래스  (0) 2008.04.04
Q015. 무명클래스의 형태  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Question 16 : 내부클래스

Click the Exhibit button.
10. interface Foo {
11.      int bar();
12. }
13.
14. public class Beta {
15.
16.      class A implements Foo {
17.           public int bar() { return 1; }
18.      }
19.
20.      public int fubar( Foo foo) { return foo.bar(); }
21.
22.      public void testFoo() {
23.
24.           class A implements Foo {
25.                public int bar() { return 2; }
26.           }
27.
28.           System.out.println( fubar( new A()));
29.      }
30.
31.      public static void main( String[] argv) {
32.           new Beta().testFoo();
33.      }
34. }

Which three statements are true? (Choose three.)

A. Compilation fails.
B. The code compiles and the output is 2.
C. If lines 16, 17 and 18 were removed, compilation would fail.
D. If lines 24, 25 and 26 were removed, compilation would fail.
E. If lines 16, 17 and 18 were removed, the code would compile and the output would be 2.
F. If lines 24, 25 and 26 were removed, the code would compile and the output would be 1.


[HeadFirst Java - p.410]
# 내부클래스에서는 외부클래스의 모든 메소드와 변수를 사용할 수 있습니다. 심지어 private로 지정된 메소드와 클래스도 전부 쓸 수 있습니다. 내부클래스에서는 그런 외부클래스의 변수와 메소드도 모두 내부클래스 안에서 선언한 것처럼 사용하면 됩니다.
# 간단한 내부클래스 (내부클래스에서 외부클래스 변수를 사용하는 방법)
     class MyOuterClass {
          private int x;
          class MyInnerClass {
               void go() { x = 42; }
          }
     }


Answer: BEF
반응형

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

Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q015. 무명클래스의 형태  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Q013. import static  (0) 2008.04.03
Question 15 : 무명클래스의 형태

Given:
10. interface Foo { int bar(); }
11. public class Sprite {
12.      public int fubar( Foo foo) { return foo.bar(); }
13.      public void testFoo() {
14.           fubar(
15.                // insert code here
16.           );
17.      }
18. }

Which code, inserted at line 15, allows the class Sprite to compile?

A. Foo { public int bar() { return 1; } }
B. new Foo { public int bar() { return 1; } }
C. new Foo() { public int bar(){return 1; } }
D. new class Foo { public int bar() { return 1; } }


[Internet]
http://blog.naver.com/caoticc?Redirect=Log&logNo=140045230831
# 익명클래스/무명클래스 (anonymous class)
     - 클래스 또는 인터페이스에 대한 객체를 생성하면서 바로 클래스 또는 인터페이스(내용)를 정의하는 클래스
     - 다시말해서, new 수식이 있는 곳에서 바로 클래스 또는 인터페이스를 정의하는 것
# 무명클래스의 특징
     - 단순한 클래스 또는 인터페이스를 정의하여 사용할 때, 여러 곳에서 사용하는 것이 아니고 단 한 번만 정의하여 사용할 경우 주로 사용
     - 주로 클래스 또는 인터페이스를 구현하여 바로 사용하고자 할 때 이용
# 주의할 점은, 무명클래스는 new 수식의 연장이므로 끝에 꼭 세미콜론(;)을 붙여주어야 한다.
# 예제
     class AnonymousClass {
          public void print() { System.out.print("클래스1"); }
     }
     public class AnonymousExample {
          public static void methodA (AnonymousClass obj) { obj.print(); }
     }
     public static void main(String[] args) {
          methodA (
               new AnonymousClass() {
                    public void print() { System.out.print("클래스2"); }
               });
          }
     }
# 결과 출력
     - 클래스2


Answer: C
반응형

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

Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Q013. import static  (0) 2008.04.03
Q012. 변수의 적용 범위  (0) 2008.04.01
Question 14 : 열거형

Given:
10. class Nav{
11.      public enum Direction { NORTH, SOUTH, EAST, WEST }
12. }
13. public class Sprite{
14.      // insert code here
15. }

Which code, inserted at line 14, allows the Sprite class to compile?

A. Direction d = NORTH;
B. Nav.Direction d = NORTH;
C. Direction d = Direction.NORTH;
D. Nav.Direction d = Nav.Direction.NORTH;

[HeadFirst Java - p.705]
# 자바5.0에서 추가된, 유효한 값의 집합을 보통 열거(enumeration)라고 부릅니다.
# 열거형의 사용 : 클래스의 일종이므로 클래스처럼 선언하고 사용한다.
     public enum Members { JERRY, BOBBY, PHIL };
     public Members selectedBandMember;
     ...
     if (selectedBandMember == Members.JERRY) {
          ...
     }

Answer: D
반응형

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

Q016. 내부클래스  (0) 2008.04.04
Q015. 무명클래스의 형태  (0) 2008.04.04
Q013. import static  (0) 2008.04.03
Q012. 변수의 적용 범위  (0) 2008.04.01
Q011. 문법 오류  (0) 2008.04.01

+ Recent posts