카테고리 없음
객체지향 프로그래밍 13. 추상클래스
코딩펭귄
2023. 12. 15. 02:29
추상클래스
- 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
- 추상클래스 = 상속을 하기위해 만든 클래스
- 메서드 선언(declaration) : 반환타입, 메서드 이름, 매개변수로 구성
- 메서드 정의(definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body) 를 가짐 ({ })
- 예) int add(int x, int y); // 구현부{}가 없음-선언 : 추상메서드
int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님 - abstract 예약어를 사용
- 추상 클래스는 new 할 수 없음 ( 인스턴스화 할 수 없음 )
추상클래스 구현
- 메서드에 구현 코드가 없으면 abstract 로 선언
- 도식도에 이텔릭체로 표현됨
- abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
- 모든 메서드가 구현 된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없음
- 추상 클래스의 추상 메서드는 하위 클래스가 상속 하여 구현
- 추상 클래스 내의 추상 메서드 : 하위 클래스가 구현해야 하는 메서드
- 추상 클래스 내의 구현 된 메서드 : 하위 클래스가 공통으로 사용하는 메서드 ( 필요에 따라 하위 클래스에서 재정의 함 )
예제
package ch2_9;
// 이 클래스는 상속을 위한 abstract(추상)클래스이다!
public abstract class Computer {
//display, typing은 추상클래스.
// 이 클래스에서 구현하지 않을것이므로 public 이 아닌, abstract로 씀
// 공통메소드가 아닌 , 구현하지 못한 이 부분은 추상메소드로 놓고,
// 하위클래스에 책임을 위임한다 = 나는 구현하지 않을테니, 상속받는 애들이 알아서 구현해라!
abstract void display();
abstract void typing();
// 컴퓨터는 공통으로 쓸 아래 두개의 메소드만 구현해 놓음
public void turnOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
package ch2_9;
//Computer의 상속을 받음
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");
}
}
package ch2_9;
public abstract class NoteBook extends Computer{ //2개 구현해야하지만 하나만 구현했으므로 abstract
@Override
public void display() {
System.out.println("NoteBook display");
}
}
package ch2_9;
public class MyNoteBook extends NoteBook {
@Override
public void typing() {
System.out.println("NoteBook typing");
}
}
package ch2_9;
public class ComputerTest {
public static void main(String[] args) {
Computer desktop = new DeskTop();
desktop.display();
// Computer computer = new Computer(); - 오류남. Computer가 추상클래스이기 때문
// computer.turnOff();
NoteBook myNote = new MyNoteBook();
}
}