SECTION 12 - 추상클래스와 인터페이스
330 ~ 331 page.
1. 다음 빈칸에 알맞은 단어를 작성해 보세요.
1) 구현 내용이 없이 비어있는 메서드를 _____ (이)라고 부릅니다.
2) 위 메서드를 선언할 때는 _____ 키워드를 사용해야 합니다.
3) 이러한 메서드를 1개 이상 가지고 있는 클래스를 _____ 클래스라고 부릅니다.
=>
1) 추상메서드
2) abstract
3) 추상
2. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는 곳을 모두 찾아 수정해 보세요.
package section12;
abstract class Bike {
int wheel;
Bike(int wheel) {
this.wheel = wheel;
}
void info() {
sysout("이 자전거는" + wheel + 발 자전거입니다.);
}
}
class ChildBike extends Bike {
ChildBike(int wheel) {
}
}
class PRACTICE_12_02 {
public static void main(String[] args) {
Bike b = new Bike(2);
ChildBike cb = new ChildBike(4);
cb.info();
}
}
=>
1)
class Bike는 추상클래스 이기 때문에,
void info() 메서드는 abstract가 붙어야 한다.
추상 메서드는 자손 클래스에서 해당 메서드를 오버라이딩 해서 사용하는게 강제기 때문에,
기능 구현을 하지 않는다.
따라서 메서드 바디를 버린다. == { } 를 버린다.
2)
자손클래스인 ChildBike extends Bike는
조상클래스의 멤버변수를 초기화 해야 하기 때문에 super() 메서드를 반드시 호출한다.
조상클래스의 생성자는 디폴트 생성자가 없기 때문에, (인자 1개짜리 생성자 밖에 없음)
자손클래스의 생성자 안에 super(wheel); 을 적어줘야 한다.
3)
class Bike는 추상클래스라 객체 생성이 불가능 하다.
main() 에 Bike b = new Bike(2); 를 없앤다.
4)
cb.info()를 하기 위해서는 class ChildBike 에 추상메서드의 info() 메서드를
오버라이딩 해서 사용 해야 한다.
class ChildBike extends Bike {
void info() {
sysout("이 자전거는 " + wheel + "발 자전거 입니다.);
3. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.
1) 추상 클래스는 자식 클래스들이 상속받아 구현합니다. (___)
2) 인터페이스는 다른 클래스 코드들과의 사이에서 중간 매개체 역할을 합니다. (___)
3) 인터페이스 안에서 상수를 선언할 때, final을 명시하지 않으면 syntax error가 발생합니다. (___)
4) 추상 클래스와 인터페이스의 추상 메서드는 구현부가 있으면 안됩니다. (___)
5) 클래스 간 다중 상속이 불가능한 것처럼 인터페이스도 다중 상속이 불가능합니다. (___)
=>
O
?
?
?
X
4. 2번 예제 코드에서 Bike 클래스 안에 아래 메서드를 추가했습니다. ChildBike 클래스를 어떻게 수정해야 할까요 ?
abstract int getWheel();
=>
int getWheel() {
실행문
}
'멘토씨리즈 자바 > 예제' 카테고리의 다른 글
[응용문제] 파일 입출력 (0) | 2023.05.28 |
---|---|
[응용문제] 스레드 (0) | 2023.05.28 |
[응용문제] 다형성과 타입 변환 (0) | 2023.05.22 |
[응용문제] 상속 (0) | 2023.05.21 |
[응용문제] 생성자 (0) | 2023.05.21 |