'명품 자바 에센셜 풀이' 시리즈명품 자바 에센셜 연습문제 5장(이론)

baealex

소비적인 일보단 생산적인 일을 좋아합니다.

Sign in to view email


문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.



연습문제 5장

1. 다음 코드에 대해 물음에 답하라.

class A {
    private int a,b;
    public void set(int a, int b) {
        this.a = a;
        this.b = b;
    }
}
class B extends A {
    protected int c, d;
}
class C extends B {
    public int e,f;
}

(1) A objA = new A(); 에 의해 생성되는 객체 objA의 멤버들은 모두 나열하라.
a, b, set()
(2) B objB = new B(); 에 의해 생성되는 객체 objB의 멤버들은 모두 나열하라.
a, b, set(), c, d
(3) C objC = new C(); 에 의해 생성되는 객체 objC의 멤버들은 모두 나열하라.
a, b, set(), c, d, e, f


2. 상속에 관한 접근 지정자에 대한 설명이다. 틀린 것은?
① 슈퍼 클래스의 private 멤버는 서브 클래스에서 바로 접근할 수 없다.
② 슈퍼 클래스의 protected 멤버는 같은 패키지에 있는 서브 클래스에서만 접근할 수 있다.
③ 슈퍼 클래스의 public 멤버는 다른 모든 클래스에서 접근할 수 있다.
④ 슈퍼 클래스의 디폴트 멤버는 같은 패키지에 있는 다른 모든 클래스에서 접근 가능하다.
다른 패키지의 서브 클래스에서도 접근이 가능하다.


3. 메소드 오버라이딩에 대한 설명으로 틀린 것은?
① 상속 관계에서 발생한다.
② 슈퍼 클래스의 메소드를 서브 클래스에서 재작성하는 것이다.
③ 서브 클래스에서 슈퍼 클래스의 메소드 이름, 매게 변수의 개수와 타입, 리턴 타입을 동일하게 선언해야 한다.
④ 정적 바인딩이 발생한다.
동적 바인딩


4. 접근 지정에 관한 무제이다. 컴파일 오류가 발생하는 곳은 어디인가?

class A {
    private int x, y;
    protected void setX(int x) { this.x = x; }  // 1
}
class B extends A {
    private w;
    protected void setXY(int a, int b, int c) {
        setX(a+b); // 2
        y = b; // 3
        w = c;  // 4
    }
}

③ 슈퍼 클래스에서 private로 선언된 멤버라 위와같이 접근할 수 없다.


5. 생성자에 관한 문제이다. 다음 빈칸에 적절한 한 줄의 코드를 삽입하라.

class LCD {
    private int size;
    public LCD(int n) { size = n; }
}
class ColorLCD extends LCD {
    int colorSize;
    public B(int colorSize, int size) {
        _______________________
        this.colorSize = colorSize;
    }
}

super(size);


6. 생성자에 관한 문제이다. 다음 코드에 대해 물음에 답하라.

class A {
    public A(int x) { System.out.print("A" + x); }
}
class B extends A {
    public B() { System.out.print("B"); }
    public B(int x) { System.out.print("B" + x); }
}

(1) 이 코드에서 컴파일 오류가 발생하는 곳은 어디인가? 컴파일 오류의 원인은 무엇인가?
위 코드 기준 7행이 에러 : 같은 유형의 생성자가 슈퍼 클래스에 존재하지 않음

(2) B b = new B();를 실행한 결과가 다음과 같도록 생성자 B()를 수정하라.
A20B
public B() { super(20); System.out.print("B"); }

(3)B b = new B(30);을 실행한 결과가 다음과 같도록 생성자 B(int x)를 수정하라.
A50B30
public B(int x) { super(50); System.out.print("B" + x); }


7. 업캐스팅에 관한 문제이다. 다음 코드에는 클래스 A, B와 객체 생성 코드가 있다.

public class A {
    public int x;
}
public class B extens A {
    public int y;
}
...
A a = new A();
B b = new B();

(1) 업캐스팅을 골라라.
① a = new A(); ② a = b; ③ b = a; ④ b = new B();
업캐스팅 : 서브 클래스 레퍼런스를 슈퍼 클래스에 대입

(2) 다음 코드는 컴파일 오류는 없지만 실행중에 오류가 발생한다. 그 이유는 무엇인가?
b = (B) new A(); // 실행 오류 발생
b.y = 100;


8. instanceof에 관한 문제이다. 다음 클래스가 있을 때 물음에 답하라.

class A {
    int i;
}
class B extends A {
    int j;
}
class C extends B {
    int k;
}
class D extends B {
    int k;
}

(1) 다음 코드를 실행한 결과는?

A c = new C();
System.out.println(c instanceof D);
System.out.println(c instanceof A);

false
true

(2) 다음 코드를 실행한 결과는?

System.out.println(new D() instanceof C);
System.out.println(new D() instanceof A);

false
true


9. 동적 바인딩에 관한 문제다. 다음 질문에 따라 빈칸에 적절한 코드를 삽입하라.

class Shape {
    public void draw() { System.out.println("Shape"); }
}
class Circle extends Shape {
    public void paint() {
        _________________
    }
    public void draw() { System.out.println("Circle"); }
}

(1) paint()가 호출되면 "Circle"이 출력된다.
draw();
(2) paint()가 호출되면 "Shape"가 출력된다.
super.draw();


10. 다음에서 추상 클래스 선언이 잘못된 것은?

① abstract class A {
    void f();
}

② abstract class A {
    void f() { }
}

③ abstract class A {
    abstract void f();
}

④ abstract class W {
    abstract void f();
}
abstract class A extends W {
    void f() { }
}

abstract void f();로 생성되어야 한다.


11. 동적 바인딩에 대해 다음에 답하라.

abstract class Shape {
    public void paint() { draw(); }
    abstract public void draw();
}
abstract class Circle extends Shape {
    private int radius;
    public Circle(int radius) { this.radius = radius; }
    double getArea() { return 3.14*radius*radius; }
}

(1) 다음 중 오류가 발생하는 것을 모두 골라라.
① Shape s;
② Circle c;
③ Shape s = new Shape();
④ Circle c = new Circle(10);
추상 클래스 이므로 객체 생성이 되지 않는다.


(2) 다음 코드의 실행 결과가 “반지름=10”이 출력되도록 Circle 클래스를 수정하라.

class Circle extends Shape {
    private int radius;
    public Circle(int radius) {
        this.radius = radius;
    }
    double getArea() {
        return 3.14*radius*radius;
    }
    public void draw() {
        System.out.println("반지름="+radius);
    }
}


12. 다음 중 인터페이스의 특징이 아닌 것은?
① 인터페이스의 객체를 생성할 수 없다.
② 여러 인터페이스를 상속받는 다중 상속을 지원한다.
③ 인터페이스는 추상 메소드, 상수, 필드로 구성된다.
④ 인터페이스는 implements 키워드를 이용하여 구현한다.



'명품 자바 에센셜 풀이' 시리즈
문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.
작성된 댓글이 없습니다!
로그인된 사용자만 댓글을 작성할 수 있습니다.