추상클래스 - 1. 추상클래스 (abstract class)

Ⅰ. 추상클래스 (abstract class)

 

1. 추상클래스의 위치

 

2. 추상클래스의 개념

 - 추상메소드(abstract method)를 포함한 클래스

 - 메소드의 본체({ })가 없고 세미콜론(;)으로 끝남

 

3. 오버라이딩(overriding) vs. 구현하기(implements)

 - 오버라이딩 (overriding)

    - 부모클래스의 메소드(완성/미완성)를 자식클래스에서 재정의(완성)

 - 구현하기 (implements)

    - 부모클래스의 미완성메소드(추상메소드)를 자식클래스에서 재정의(완성)

 

4. 추상클래스의 특징

 - class 앞에 abstract를 붙여야 함

 - 추상클래스는 그 자체로는 객체 생성 불가함 (추상메소드(abstract method/미완성 메소드)를 포함하기 때문)

 - 추상 클래스는 오로지 상속하기 위해서만 존재

    ※ 힙(Heap) 메모리에 객체 생성을 위해서는 모두 완성된 메소드를 가질 때만 가능

 - 추상 메소드를 상속받은 클래스는 반드시 이를 오버라이딩 해야함

 

5. 추상클래스 예시

// Example
package sample;

abstract class Poketmon {
	// 이 것들을 상속받거든 반드시 오버라이딩(구현)해야 함
	abstract void sound();
	abstract void attack();
}

class Pikachu extends Poketmon {
	void sound() {
		System.out.println("피카 피카");
	}
	void attack() {
		System.out.println("백만볼트");
	}
}

class Gorapaduck extends Poketmon {
	void sound() {
		System.out.println("파덕");
	}
	void attack() {
		System.out.println("물대포");
	}
}

public class Main {
	public static void main(String[] args) {
		Poketmon a = new Pikachu();
		a.sound();		// 피카 피카
		a.attack();		// 백만볼트
		
		Poketmon b = new Gorapaduck();
		b.sound();		// 파덕
		b.attack();		// 물대포
	}
}