JAVA/명품 JAVA Programming

[(개정판 4판) 명품 JAVA Programming] 5장 이론 문제

최옥구 2023. 1. 29. 15:00
반응형

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 = newobjA();에 의해 생성되는 객체 objA의 멤버들을 모두 나열하라.

- set(int)

 

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

- int b, int c, set(int)

 

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

- int b, int c, int d, int e, set(int)

 

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

class D extends C{
	public void f() {
		a = 1;		//a는 private으로 선언되어있기에 이렇게 작성할 수 없음.
		set(10);	
		b = 20;		
		c = 30;
	}
}

 

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

- 1번 / java.lang.Object는 최상위 클래스로 모든 클래스가 상속받습니다. 

 

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

class Pen{		//pen이라는 super 클래스를 만들고 공통되는 것들을 다 묶으면 됩니다. 
	protected int amount;
	protected 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) {amount = n;}
}

 

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

- 서브, extends, super, instanceof, interface

 

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

- 2번 / protected는 다른 패키지의 서브 클래스도 접근이 가능하다.

 

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

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

 

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

 

8. 다음 코드에서 생성자로 인한 오류를 찾아내어 이유를 설명하고 오류를 수정하라. 

class A{		//기본생성자 부재로 오류가 발생한다.
    public int a;
    public A(){}
    protected A(int i) {a = i;}
}
class B extends A{
	private int b;
	public B() {b = 0;}
}

 

9. 다음 추상 클래스의 선언이나 사용이 잘못된 것을 있는 대로 가려내고 오류를 지적하라. 

- 1번 f() 함수가 구현이 되어있지 않기 때문에 추상 메서드로 선언해야 합니다.

- 3번 추상 클래스를 상속받으면 반드시 추상 메서드를 모두 구현해야 합니다. 따라서 f() 메서드를 클래스 C에서 구현해야 합니다. 

 

10. 추상 클래스를 구현하는 문제이다. 실행 결과와 같이 출력되도록 클래스 B를 완성하라. 

abstract class OddDetector{
	protected int n;
	public OddDetector(int n) {
		this.n = n;
	}
	public abstract boolean isOdd();
}
public class B extends OddDetector{
	public B(int n) {
		super(n);
	}
	public boolean isOdd() {
		if(n % 2 == 0 )
			return false;
		else return true;
	}
	public static void main(String[] args) {
		B b = new B(10);
		System.out.println(b.isOdd());
	}
}

 

12. 다음 상속 관계 클래스들이 있다. 

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

(1) 다음 중 업캐스팅을 모두 골라라

- 2번 / B b = new C(); 슈퍼 클래스 B에 서브 클래스를 업캐스팅 하고 있다. 

 

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

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

- true, true / 업캐스팅 후, D는 최하단 서브클래스기 때문에 B와 C의 인스턴스이다.  

 

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

System.out.println(new D() instanceof Object);
System.out.println("JAVA" instanceof Object);

- true, true / Object는 모든 클래스들의 슈퍼클래스이다. "JAVA"도 String 클래스의 객체이기 때문에 true이다.

 

12. 동적 바인딩에 관한 문제이다. 다음 코드가 있을 때 질문에 답하라. 

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

(1) Shape s = new Circle(); s.draw()가 호출되면 출력되는 내용은?

- circle / draw() 함수가 Circle의 draw() 함수로 오버라이딩 되었다. 

 

(2) s.paint()가 호출되면 "Circle"이 출력되도록 빈칸에 적절한 코드를 삽입하라. 

- draw();

 

(3) s.paint()가 호출되면 "Shape"이 출력되도록 빈 칸에 적절한 코드를 삽입하라. 

- super.draw();

 

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

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) 다음 중 오류가 발생하는 것을 있는 대로 골라라. 

- 2번 / 추상함수는 레퍼런스는 만들 수 있지만, 객체 생성은 하지 못합니다. 

 

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

Circle p = new Circle(10);
p.paint();

[수정된 코드]

abstract class Shape{
	public void paint() {draw();}
	abstract public void draw();
}
class Circle extends Shape{		//추상 클래스에서 일반 클래스로 바꾸고 추상 메서드를 모두 구현합니다.
	private int radius;
	public void draw() {System.out.println("반지름 = " + radius);}
	public Circle(int radius) {this.radius = radius;}
	double getArea() {return 3.14 * radius * radius;}
}
public class App{
	public static void main(String[] args) {
		Circle p = new Circle(10);
		p.paint();
	}
}

 

14. 다형성에 대한 설명 중 틀린 것은?

- 4번 / 다형성은 객체 지향의 꽃입니다. 다형성을 통해 변수 이름 생성의 노고를 줄일 수 있으며, 거시적인 프로그래밍이 가능합니다.

 

15. 다음 중 인터페이스의 특징이 아닌 것은? 

- 2번 / 인터페이스는 메소드 선언만 가능합니다. 

 

16. 빈칸을 적절히 채우고, 실행 예시와 같이 출력되도록 클래스 TV에 필요한 메소드를 추가 작성하라. 

interface Device{
	void on();
	void off();
}
public class TV implements Device{
	public void on() {System.out.println("켜졌습니다.");}
	public void watch() {System.out.println("방송중입니다.");}
	public void off(){System.out.println("종료합니다.");}
	public static void main(String[] args) {
		TV myTV = new TV();
		myTV.on();
		myTV.watch();
		myTV.off();
	}
}
반응형