1. 핵심 정리
추상메서드란?
구현 내용 없이 구현부가 비어있는 메서드를 추상 메서드라고 함
추상 메서드 선언
abstract 키워드를 사용하여 다음과 같이 선언
[접근 제한자] abstract 반환타입 메서드이름 (매개변수1, 매개변수2 ...)
추상메서드를 1개 이상 선언하면, 그 클래스는 추상 클래스로 선언되어야 함
추상 클래스로 선언되는 클래스는 다음과 같은 제약 조건을 가짐
- 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없습니다.
- 자식 클래스의 생성자에서 super()를 통해 추상 클래스의 생성자를 호출하여
부모 객체를 생성한 후 자식 객체를 생성합니다.
인터페이스는 모든 메서드가 추상 메서드
인터페이스 선언
interface 키워드를 사용해 선언
어떤 형태로도 객체를 만들 수 없으므로 클래스라고 부를 수 없음
따라서 별도의 필드와 생성자도 존재하지 않으며 필드 대신 상수를 선언하여 사용
구현 클래스
인터페이스를 구현해주는 클래스를 구현 클래스라고 함
implements 키워드를 사용해 선언
|
1
2
3
4
5
6
7
8
9
|
[접근 제한자] class 클래스 이름 implements 인터페이스이름 {
// 필드
// 생성자
// 구현 메서드(추상 메서드 오버라이딩)
|
cs |
2. 응용 문제
Q1. 다음 빈칸에 알맞은 단어를 작성해 보세요.
- 구현 내용이 없이 비어있는 메서드를 추상 메서드 (이)라고 부릅니다.
- 위 메서드를 선언할 때는 abstract 키워드를 사용해야 합니다.
- 이러한 메서드를 1개 이상 가지고 있는 클래스를 추상 클래스 라고 부릅니다.
Q2. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는 곳을 모두 찾아 수정해 보세요.
|
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
|
package section12;
abstract class Bike {
int wheel;
Bike(int wheel) {
this.wheel=wheel;
}
void info() {
System.out.println("이 자전거는 "+wheel+"발 자전거입니다.");
}
}
class ChildBike extends Bike {
ChildBike(int wheel) {
}
}
public class PRACTICE_12_02 {
public static void main(String[] args) {
Bike b=new Bike(2);
ChildBike cb=new ChildBike(4);
cb.info();
}
}
|
cs |
A2. 위 코드에서 15~18줄은 Bike 추상 클래스의 상속관계이므로 객체안에 super생성자를 넣어줘야 한다.
그리고 22줄에서 Bike는 추상 클래스이므로 직접 생성자를 호출해 객체를 생성할 수 없다.
|
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
|
package section12;
abstract class Bike {
int wheel;
Bike(int wheel) {
this.wheel=wheel;
}
void info() {
System.out.println("이 자전거는 "+wheel+"발 자전거입니다.");
}
}
class ChildBike extends Bike {
ChildBike(int wheel) {
super(wheel);
}
}
public class PRACTICE_12_02 {
public static void main(String[] args) {
Bike b=new ChildBike(2);
ChildBike cb=new ChildBike(4);
cb.info();
}
}
|
cs |
Q3. 다음 문장이 맞으면 O표, 틀리면 X표 하세요.
- 추상 클래스는 자식 클래스들이 상속(extends)받아 구현합니다. (O)
- 인터페이스는 다른 클래스 코드들과의 사이에서 중간 매개체 역할을 합니다. (O)
- 인터페이스 안에서 상수를 선언할 때, final을 명시하지 않으면 syntax error가 발생합니다. (X)
- 추상 클래스와 인터페이스의 추상 메서드는 구현부가 있으면 안됩니다. (X)
- 클래스 간 다중 상속이 불가능한 것처럼 인터페이스도 다중 상속이 불가능합니다. (X)
Q4. 2번 예제코드에서 Bike 클래스 안에 아래 메서드를 추가했습니다. ChildBike 클래스는 어떻게 수정해야 할까요?
abstract int getWheel();
A4. 오버라이딩을 통해 해당 메서드를 반드시 재정의 하여 구현해야 하기에 아래코드를 추가해야 한다.
|
1
2
3
4
5
6
7
8
9
10
|
@Override
int getWheel() {
// TODO Auto-generated method stub
return 0;
|
cs |
Q5. 인터페이스를 사용함으로써 다음과 같은 객체 지향의 특징을 가질 수 있습니다. 각 용어의 개념에 대해 이해하고 있는
것을 간략히 서술해 보세요.
- 정보 은닉 : 실제 구현 클래스의 내용을 전혀 보지 않고도 개발 코드로 객체를 사용할 수 있다.
- 모듈화 : 구현 클래스들이 독립적으로 구현되고 사용될 수 있다. 개발 코드에서 객체 변경이 필요할 때, 개발 코드의
수정을 최소화할 수 있다.
2024.07.24
'JAVA > JAVA복습(멘토씨리즈 자바)' 카테고리의 다른 글
| [JAVA복습] 14. 예외처리 (0) | 2024.07.25 |
|---|---|
| [JAVA복습] 13. 내부 클래스 (0) | 2024.07.24 |
| [JAVA복습] 11. 다형성과 타입 변환 (0) | 2024.07.22 |
| [JAVA복습] 10. 상속 (0) | 2024.07.21 |
| [JAVA복습] 09. 생성자 (0) | 2024.07.21 |