일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- DATE_ADD()
- Now()
- strip_tags #html태그제거 #PHP strip_tags
- php5.x
- sql용어
- BufferedReader #BufferedWriter
- Java환경변수 설정
- 함수정의확인
- 이클립스 설치
- Java 및 이클립스 설치
- 영카트 #테스트메일
- HAVING 절
- apt-get #apt-get 옵션 #apt-get options
- DATE_SUB()
- PHP달력관련함수
- MySQL 날짜 관련 함수
- SQL 중복제거
- explode #선택제거 #PHP explode
- serializeObject
- DATE_FORMAT()
- PDO #DB접속
- JSTL
- CURDATE()
- trim #공백 제거 #PHP trim()
- 배열관련함수
- CURTIME()
- 가상화
- db접속
- apt #apt 명령어 #apt-get명령어
- DATEDIFF()
- Today
- Total
M
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
2. 자바의 모든 클래스가 반드시 상속받게 되어 있는 클래스는?
(1) Object (2) Java (3) Class (4) Super
-> 1
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) { amount = 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 SharpPencil {
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); }
}
4. 다음 중 설명에 적절한 단어를 기입하라.
자바에서 상속받는 클래스를 서브클래스(sub class)라고 부르며, extends 키워드를 이용하여 상속을 선언한다. 상속받은 클래스에서 상속해준 클래스의 멤버를 접근할 때 super 키워드를 이용한다. 한편, 객체가 어떤 클래스의 타입인지 알아내기 위해서는 instanceof 연산자를 이용하며, 인터페이스는 클래스와 달리 interface 키워드를 이용하여 선언한다.
5. 상속에 관련된 접근 지정자에 대한 설명이다. 틀린 것은?
1) 슈퍼 클래스의 private 멤버는 서브 클래스에서 접근할 수 없다.
2) 슈퍼 클래스의 protected 멤버는 같은 패키지에 있는 서브 클래스에서만 접근할 수 있다.
3) 슈퍼 클래스의 public 멤버는 모든 다른 클래스에서 접근할 수 있다.
4) 슈퍼 클래스의 디폴트 멤버는 같은 패키지에 있는 모든 다른 클래스에서 접근 가능하다.
-> 2
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;
}
}
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
8. 다음 코드에서 생성자로 인한 오류를 찾아내어 이유를 설명하고 오류를 수정하라.
class A {
private int a;
public A(int i) { a = i; }
}
class B extends A {
private int b;
public B() { b = 0; }
}
-> class B와 짝을 이루는 기본 생성자가 A에 없다.
-> class A에 기본 생성자를 생성해주거나 public B() { super(1); b = 0; } 수정
9. 다음 추상 클래스의 선언이나 사용이 잘못된 것을 있는 대로 가려내고 오류를 지적하라.
1 -> f() 메소드에 abstract를 선언한다,
3 -> 추상 클래스를 상속 받으면 추상 메소드를 오버라이딩을 해야한다. 만약 그렇지 않다면 abstract C extends B로 수정을 한다.
4 -> class B 에서는 int로 선언이 되고 class C에서는 void로 되어있다. class C 에서 f메소드를 int f() { System.out,println("~"); return 0; } 로 변경을 한다.
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() {
return (n % 2 == 1) ? true : false;
}
public static void main(String[] args) {
B b = new B(10);
System.out.println(b.isOdd());
}
}
11. 다음 상속 관계의 클래스들이 있다.
class A {
int i;
}
class B extends A {
int j;
}
class C extends B {
int k;
}
class D extends B {
int m;
}
(1) 다음 중 업캐스팅을 모두 골라라?
1) A a = new A();
2) B b = new C();
3) A a = new D();
4) D d = new D();
-> 2, 3
(2) 다음 코드를 실행한 결과는?
A x = new D();
System.out.println(x instanceof B);
Ststem.out.println(x instanceof C);
-> true
-> false
(3) 다음 코드를 실행한 결과는?
System.out.println(new D() instanceof Object);
System.out.println("Java" instanceof Object);
-> true
-> 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
(2) s.paint()가 호출되면 "Circle"이 출력되도록 빈 칸에 적절한 코드를 삽입하라.
draw();
(3) s.paint()가 호출되면 "Shape"이 출력되도록 빈 칸에 적절한 코드를 삽입하라.
super.draw();
13. 동적 바인딩에 대해 다음에 답하라.
abstract class Shape {
public void paint() { draw(); }
abstract public void draw();
}
class Circle extends Shape {
private int radius;
public Circle(int radius) { this.radius = radius; }
double getArea() { return 3.14 * radius * radius; }
}
(1) 다음 중 오류가 발생하는 것을 있는 대로 골라라.
1) Shape s; 2) Shape s = new Shape(); 3) Circle c; 4) Circle c = new Circle(10);
-> 2
(2) 다음 코드의 실행 결과 "반지름=10"이 출력되도록 Circle 클래스를 수정하라.
Circle p = new Circle(10);
p.paint();
-> Circle 클래스에 public void draw() { System.out.println("반지름="+ radius); } 추가
14. 다형성에 대한 설명 중 틀린 것은?
① 추상 메소드를 두는 이유는 상속 받는 클래스에서 다형성을 실현하도록 하기 위함이다.
② 인터페이스도 구현하는 클래스에서 다형성을 실현하도록 하기 위함이다.
③ 다형성은 서브클래스들이 수퍼 클래스의 동일한 메소드를 서로 다르게 오버라이딩하여 이루어진다.
④ 자바에서 다형성은 모호한(ambiguous) 문제를 일으키므로 사용하지 않는 것이 바람직하다.
-> 4
15. 다음 중 인터페이스의 특징이 아닌 것은?
① 인터페이스의 객체는 생성할 수 없다.
② 인터페이스는 클래스와 같이 멤버 변수(필드)의 선언이 가능하다.
③ 인터페이스의 추상 메소드는 자동으로 public이다.
④ 클래스에서 인터페이스를 구현할 때 implements 키워드를 이용하며, 모든 추상메소드를 작성하여야 한다.
-> 2
16. 빈칸을 적절히 채우고, 실행 예시와 같이 출력되도록 클래스 TV에 필요한 메소드를 추가 작성하라.
_________ Device {
void on();
void off();
}
public class TV _______ Device {
public static void main(String[] args) {
TV myTV = new TV();
myTV.on();
myTV.watch();
myTV.off();
}
}
-> inferface, implements
'Java > 명품 Java Programming' 카테고리의 다른 글
5장 실습문제 (0) | 2022.02.23 |
---|---|
5장 Open Challenge (0) | 2022.02.18 |
4장 실습문제 (0) | 2022.02.07 |
4장 연습문제 (0) | 2022.02.07 |
4장 Open Challenge (0) | 2022.02.06 |