추상클래스 (abstract class)
- 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
- 추상메서드는 몸통{}이 없는 미완성 메서드
- 다른 클래스 작성에 도움을 주기 위한 것 -> 인스턴스 생성 불가
abstract class Player{
abstract void play(int pos); //추상메서드 (몸통{} 이 없는 미완성 메서드)
abstract void stop(); // 추상메서드
}
- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
class AudioPlayer extends Player{
void play(int pose) { /*내용 생략*/} //추상메서드를 구현
void stop() { /* 내용 생략*/ } //추상메서드를 구현
추상 메서드(abstract method)
-미완성 메서드, 구현부 {}가 없는 메서드
abstract 리턴타입 메서드이름();
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
abstract class Player { //추상 클래스
abstract void play(int pos); //추상 메서드
abstract void stop(); //추상 메서드 (선언부만 있고 구현부{}가 없는 메서드)
}
//추상 클래스는 상속을 통해 완성해야 객체 생성가능
class AudioPlayer extends Player {
@Override
void play(int pos) {
System.out.println(pos+"위치부터 play 합니다");
}
@Override
void stop() {
System.out.println("재생을 멈춥니다.");
}
}
public class PlayerTest {
public static void main(String[] args) {
// Player p = new Player(); // 추상 클래스의 객체를 생성
// AudioPlayer ap = new AudioPlayer();
Player ap = new AudioPlayer(); //다형성
ap.play(100);
ap.stop();
}
}
추상클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상클래스를 만든다
public class Ex7_10 {
public static void main(String[] args) {
// Unit[] group = new Unit[]{new Marine(), new Tank(), new Dropship()};
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for(int i = 0; i < group.length; ++i)
group[i].move(100, 200);
}
}
abstract class Unit {
int x, y;
abstract void move(int x, int y);
void stop() {/*현재 위치에 정지*/}
}
class Marine extends Unit { //보병
void move(int x, int y) {
System.out.println("Marine[x="+x+",y="+y+"]");
}
void stimPack() {/*스팀팩을 사용한다. */}
}
class Tank extends Unit { //탱크
@Override
void move(int x, int y) {
System.out.println("Tank[x="+x+",y="+y+"]");
}
void changeMod() { /*공격모드를 변환한다.*/}
}
class Dropship extends Unit { //탱크
@Override
void move(int x, int y) {
System.out.println("Dropship[x="+x+",y="+y+"]");
}
void change() { /*공격모드를 변환한다.*/}
}
- 추상화된 코드는 구체화된 코드보다 유연; 변경에 유리함
'Java > 자바의 정석' 카테고리의 다른 글
남궁성 자바의 정석 기초편 ch 7 디폴트 메서드 static 메서드 (0) | 2022.12.01 |
---|---|
남궁성 자바의 정석 기초편 ch 7 인터페이스 interface (0) | 2022.12.01 |
남궁성 자바의 정석 기초편 ch 7 instance of 연산자 매개변수다형성 배열 (0) | 2022.11.30 |
남궁성 자바의 정석 기초편 ch 7 접근 제어자 캡슐화 다형성 참조변수의 형변환 (0) | 2022.11.26 |
남궁성 자바의 정석 기초편 ch 7 패키지 클래스 import문 제어자 static final abstract (0) | 2022.11.26 |