[JAVA] 명품 자바 프로그래밍 5장 이론문제
1.
(1)
a, set()
(2)
a, b, c, set()
(3)
a, b, c, d, e, set()
(4)
1번 라인 -> private인 a는 수정 불가
2.
1번 Object 클래스
3.
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);
}
}
4.
서브 클래스, extends, super, instanceof, implements
5.
2번 -> 다른 패키지에서 상속 받은 서브 클래스도 가능
6.
extends, super(size);
7.
A
B:11
8.
A의 기본 생성자가 없다.
public A()
{
a=i;
}
기본 생성자를 추가해주자.
9.
1번 -> 추상 메소드가 아닌 메소드는 구현되어 있어야한다.
3번 -> 추상 클래스를 상속 받고 구현하지 않으면 그 클래스도 추상 클래스여야 한다.
4번 -> 추상 클래스 B의 메소드 f()의 반환형이 int인데 상속 받아 오버라이딩할때 반환형이 이상하다. 반환형을 바꾸고 return 0;도 추가해주자.
10.
아래의 메소드를 B에 추가하자.
public boolean isOdd()
{
if(n%2==0)
return true;
else
return false;
}
11.
(1)
2번, 3번
(2)
true
false
(3)
true
true
12.
(1)
Circle
(2)
draw();
(3)
super.draw();
13.
(1)
2번, 4번 -> 추상 클래스는 객체 생성이 불가
( 구현이 다 되어있고 추상 클래스라도 생성이 안되더라. )
(2)
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);
}
}
14.
4번
15.
2번 -> 인터페이스에서 필드(멤버 변수)를 만들 수 없음. 상수 필드밖에 안됨 ( public static final int a = 5 )
또는 public static final 생략 가능하기에 int a = 5; 도 가능)
16.
interface, implements
interface Device{
void on();
void off();
}
public class Test implements Device{
public void on()
{
System.out.println("켜졌습니다.");
}
public void off()
{
System.out.println("종료합니다.");
}
public void watch()
{
System.out.println("방송중입니다.");
}
public static void main(String[] args) {
Test myTest = new Test();
myTest.on();
myTest.watch();
myTest.off();
}
}
인터페이스에 메소드
void on(); 은 사실 public abstract void on(); 으로 public abstract가 생략되었기에
인터페이스 device를 implements하여 구현할때 접근 지정자를 생략하면 디폴트이므로
원래 public인데 디폴트로 접근 범위가 줄어드니 이것은 에러가 난다.
그래서 인터페이스를 받아와 구현할때 생략되어있다고해서 우리도 생략하면 안된다.
public을 붙여주자.