추상화

배지원·2022년 9월 28일
0

JAVA

목록 보기
17/32

1. 추상 클래스(abstract class)

  • 미완성 설계도. 미완성 메서드를 가지고 있는 클래스
  • 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가
  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성가능
abstract class Player{      // 추상클래스
    abstract void play(int pos);      // 추상메서드(몸통{}이 없는 미완성 메서드)
    abstract void stop();       // 추상메서드
}

-----------------------------------------------
Player p = new Player();	// 에러 발생

class AudioPlayer extends Player{   // 상속받아서 메소드 완성시킴
	void play(int pos){...}
    void stop(){...}
}

AudioPlayer ap = new AudioPlayer();	// Player ap = new AudioPlayer()와 같음
// Player 클래스가 추상화임에도 불구하고 사용가능한 이유 : 자손 클래스가 메서드를
// 완성시켰으므로 부모 클래스 사용 가능

2. 추상 메서드(abstract method)

  • 미완성 메서드. 구현부(몸통,{})가 없는 메서드
    abstract class Player{      // 추상클래스
       abstract void play(int pos);      // 추상메서드(몸통{}이 없는 미완성 메서드)
       abstract void stop();       // 추상메서드
       
       void play(){
       	play(currentPos);		// 추상메서드 호출 가능(대신, 자손객체에서 
          						// 메서드를 완성시켰을때 사용 가능)
       }
    }

3. 추상클래스의 작성

  • 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상클래스를 만든다.
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+"]");
        stimPack();
    }
    void stimPack(){
        System.out.println("스팀팩 사용");
    }
}

class Tank extends Unit{
    void move(int x, int y){
        System.out.println("Tank[ x= "+x +",y="+y+"]");
        attack();
    }
    void attack(){
        System.out.println("공격!!");
    }
}


public class abstractTest {
    public static void main(String[] args) {
        Unit[] group = {new Marine(), new Tank()};

        group[0].move(100,200);
        group[1].move(300,400);
    }
}
profile
Web Developer

0개의 댓글