abstract class 클래스명{}
abstract class A{
    public abstract int b();		// 추상메서드
    public void d(){
        System.out.println("world");	// 멤버변수 가질 수 있음
    }
    // 인스턴스생성불가하므로 오류
    //public abstract int c(){System.out.println("Hello")}
}
abstract 리턴타입 메서드이름();
1. 추상클래스와 추상메서드
abstract class Parent{
	abstract void sample1 (int x, int y);
    abstract int sample2 ();
}
2. 자식클래스
class child1 extends Parent{
	void sample1(int x, int y){ 수행문 입력 }
    int sample2(){ 수행문 입력 }
}
class child2 extends Parent{
	void sample1(int x, int y){ 수행문 입력 }
    int sample2(){ 수행문 입력 }
}
abstract class Unit{
	abstract void move (int x, int y);
    void stop();
}
class Marine extends Unit{
	void move(int x, int y)	// 추상클래스의 추상메서드(오버라이딩 해야함)
    void stimPack();		//Marine의 고유 특성
    						// void stop()도 상속 된 상태
}    
interface 인터페이스이름{}
interface PlayingCard{
	// 모든 멤버변수는 public static final~로 구성되어 있으며, 생략 가능함
    public static final int SPADE = 4;
    final int HEART = 3;	// public static final int HEART
    static int DIAMOND = 2;	// public static final int DIAMOND
    int CLOVER = 1;	// public static final int CLOVER
    
    // 모든 메서드는 public abstract~로 구성되어 있으며, 생략 가능함
    public abstract String getCardNumber();
    String getCardKind();	// public abstract String getCardKind
}
interface Fightable {
	/* 각 인터페이스에 정의된 추상메서드 전부 재정의
     하나라도 재정의 되어있지 않으면 컴파일 에러 발생 */
    void move(int x, int y);	// public abstract void move
    void attack(Unit u);
}
    
    
class Fighter implements Fightable{
	public void move(int x, int y){}
    public void attack(Unit u){}
}
abstract class Fighter implements Fightable{
	public void attack(Unit u){}
}
class Fighter extends Unit implemetns Fightable{
	public void move(int x, int y){}
    public void attack(Unit u){}
}
