본문 바로가기
Solution_/명품 java

[명품 JAVA] 5장 연습문제(1~7) (상속)

by 낭람_ 2019. 4. 14.
반응형

[5장 1번]


다음 클래스에 대해 물음에 답하라.

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

1. A objA = new objA(); 에 의해 생성되는 객체 objA의 멤버들을 모두 나열하라.

- private int a;
- public void set(int a) { this.a = a; }

2. B objB = new objB(): 에 의해 생성되는 객체 objB의 멤버들을 모두 나열하라.

- private int a;
- public void set(int a) { this.a = a; }
- protected int b, c;

3. C objC = new objC(); 에 의해 생성되는 객체 objC의 멤버들을 모두 나열하라.

- private int a;
- public void set(int a) { this.a = a; }
- protected int b, c;
- public int d, e;

4. 클래스 D를 다음과 같이 작성하였을 때, 오류가 발생하는 라인을 모두 찾아라.

class D extends C {
public void f() {
a = 1; // (1)
set(10); // (2)
b = 20; // (3)
d = 30; // (4)
}
}


- 1. a = 1; _ a는 private 멤버이므로, 접근할 수 없다.


[5장 2번]


자바의 모든 클래스가 반드시 상속받게 되어 있는 클래스는?

1. Object     2. Java    3. Class    4. Super


- 1. Object _ 자바에서 모든 클래스는 Object 클래스를 자동으로 상속받도록 컴파일 된다.


[5장 3번]


상속을 이용하여 다음 클래스들을 간결한 구조로 재작성하라.

class SharpPencil { // 샤프펜슬
private int width; // 펜의 굵기
private int amount; // 남은 량
public int getAmount() { return amount; }
public void setAmount (int amount) { this.amount = amount; }
}

class Ballpen { // 볼펜
private int amount; // 남은 량
private String color; // 볼펜의 색
public int getAmount() { return amount; }
public void setAmount (int amount) { this.amount = amount; }
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
}

class FountainPen { // 만년필
private int amount; // 남은 량
private String color; // 볼펜의 색
public int getAmount() { return amount; }
public void setAmount (int amount) { this.amount = amount; }
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
public void refill (int n) { setAmount(n); }


[풀이]

class Pen { // 모든 펜의 공통 속성
private int amount; // 남은 량
public int getAmount() { return amount; }
public void setAmount (int amount) { this.amount = amount; }
}
class SharpPencil extends Pen{ // 샤프펜슬
private int width; // 펜의 굵기
}

class Ballpen extends Pen { // 볼펜
private String color; // 볼펜의 색
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
}

class FountainPen extends Ballpen{ // 만년필
public void refill (int n) { setAmount(n); }
}


[5장 4번]


다음 중 설명에 적절한 단어를 기입하라.

자바에서 상속받는 클래스를 서브 클래스(sub class) 라고 부르며, extends 키워드를
이용하여 상속을 선언한다. 상속받은 클래스에서 상속해준 클래스의 멤버를 접근할 때
super 키워드를 이용한다. 한편, 객체가 어떤 클래스의 타입인지 알아내기 위해서는
instanceof 연산자를 이용하며, 인터페이스는 클래스와 달리 interface 키워드를
이용하여 선언한다.


[5장 5번]


상속에 관련된 접근 지정자에 대한 설명이다. 틀린 것은?

1. 슈퍼 클래스의 private 멤버는 서브 클래스에서 접근할 수 없다.

2. 슈퍼 클래스의 protected 멤버는 같은 패키지에 있는 서브 클래스에서만 접근할 수 있다.

3. 슈퍼 클래스의 public 멤버는 모든 다른 클래스에서 접근할 수 있다.

4. 슈퍼 클래스의 디폴트 멤버는 같은 패키지에 있는 모든 다른 클래스에서 접근 가능하다.


- 2. 슈퍼 클래스의 protected 멤버는 같은 패키지에 있는 서브 클래스에서만 접근할 수 있다. _ 슈퍼 클래스의 protected 멤버는 다른 패키지의 서브 클래스에서도 접근이 가능하다.


[5장 6번]


다음 빈칸에 적절한 한 줄의 코드를 삽입하라.

class TV {
private int size;
public TV(int n) { size = n; }
}
class ColorTV extends TV {
private int colors;
public ColorTV(int colors, int size) {
super(size);
this.colors = colors;
}
}


[5장 7번]


상속에 있어 생성자에 대해 묻는 문제이다. 실행될 때 출력되는 내용은 무엇인가?

class A {
public A() { System.out.println("A"); }
public A(int x) { System.out.println("A: " + x); }
}
class B extends A {
public B() { super(100); }
public B(int x) { System.out.println("B: " + x); }
}
public class Example {
public static void main(String[] args) {
B b = new B(11);
}
}
A
B: 11


반응형

댓글