추상 클래스란?
// 예시
int add(int x, int y); // 선언 이렇게 선언만 하면 추상 메서드임
int add(int x, int y) { } // 구현부가 있음, 추상 메서드 아님
- 구현 코드 없이 메서드의 선언만 있는 추상 메서드 (abstract method)를 포함한 클래스
- 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성
- 메서드 정의 (definition) : 메서드 구현 (implementation)과 동일한 의미 구현부(body)를 가짐({ })
- abstract 예약어를 사용
- 추상 클래스는 new 할 수 없음 (인스턴스화 할 수 없음)
- 추가적으로 추상클래스의 반대는 concrete class (구체적 클래스)이다.
추상 클래스 구현하기
- 메서드에 구현 코드가 없으면 abstract로 선언
- abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
- 모든 메서드가 구현된 클래스라도 abstract로 선언되면 추상클래스로 인스턴스화 할 수 없음
- 추상 클래스의 추상 메서드는 하위 클래스가 상속하여 구현
- 추상 클래스 내의 추상 메서드 : 하위 클래스가 구현해야 하는 메서드
- 추상 클래스 내의 구현된 메서드 : 하위 클래스가 공통으로 사용하는 메서드 (필요에 따라 하위 클래스에서 재정의 함)
예시 구현하기)
그림상에서 이탤릭체(비스듬한 글씨)로 쓰여진 class는 추상 클래스, 해당 클래스 안의 메서드는 추상 메서드로 선언
Computer.java
하위 클래스가 정의해서 구현해야할 메서드는 추상 메서드로 선언
하위 클래스가 공통적으로 사용하는 메서드는 메서드 선언 및 정의
package ch09;
public abstract class Computer {
abstract void display();
abstract void typing();
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
DeskTop.java
package ch09;
public class DeskTop extends Computer {
@Override
void display() {
System.out.println("DeskTop display");
}
@Override
void typing() {
System.out.println("DeskTop typing");
}
@Override
public void turnOff() {
System.out.println("DeskTop turnoff");
}
}
NoteBook.java
package ch09;
public abstract class NoteBook extends Computer {
@Override
public void typing() {
System.out.println("NoteBook typing");
}
}
MyNoteBook.java
package ch09;
public class MyNoteBook extends NoteBook {
@Override
void display() {
System.out.println("MyNoteBook display");
}
}
ComputerTest.java
package ch09;
public class ComputerTest {
public static void main(String[] args) {
Computer computer = new DeskTop();
computer.display();
computer.turnOff();
NoteBook myNote = new MyNoteBook();
}
}
2023 KAKAO Tech Campus_BackEnd 필수 과정
Java 3주차 강의 정리 내용입니다.
'개발 > Java' 카테고리의 다른 글
[3주차] Java 중급 - 구현 코드가 없는 인터페이스 (0) | 2023.06.25 |
---|---|
[3주차] Java 중급 - 추상 클래스를 활용한 템플릿 메서드 패턴 (0) | 2023.06.25 |
[3주차] Java 중급 - 다운 캐스팅과 instanceof (0) | 2023.06.25 |
[3주차] Java 중급 - 상속은 언제 사용할까 (0) | 2023.06.25 |
[3주차] Java 중급 - 다형성과 다형성을 사용하는 이유 (0) | 2023.06.25 |