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();
}
}
'JAVA > 명품 JAVA Programming' 카테고리의 다른 글
[(개정판 4판) 명품 JAVA Programming] 6장 이론 문제 (0) | 2023.02.03 |
---|---|
[(개정판 4판) 명품 JAVA Programming] 5장 실습 문제 (0) | 2023.01.31 |
[(개정판 4판) 명품 JAVA Programming] 4장 실습 문제 (1) | 2023.01.28 |
[(개정판 4판) 명품 JAVA Programming] 4장 이론 문제 (0) | 2023.01.27 |
[(개정판 4판) 명품 JAVA Programming] 3장 실습 문제 (0) | 2023.01.24 |