11. 추상
1. 추상메서드 (abstract method)
- 메서드의 구현부가 없는 것
- 오버라이딩 관계를 형성하기 위해 정의된 메서드
public abstract int func(int a);
- 메서드 블락{}을 포함하지 않는다
- 상속 계층의 부모클래스에서 자식 클래스를 위해 메서드 시그니처만 정의
- 자식클래스에서 오버라이딩 해야만 호출가능
- 부모클래스에서는 선언부만 작성
- 자식클레스에서 기능 구현
2. 추상클래스 (abstract class)
- 미완성 클래스
- 객체 생성 불가
- 상속을 통해 자식클래스로만 완성 가능
- 추상메서드 하나라도 있다면 추상클래스
- 추상메서드가 없더라도 abstract 선언으로 추상클래스 사용 가능
- 인스턴스화 목적이 아닌, 단지 상속의 관계를 형성하기 위해 사용
abstract class 클래스명{}
3. 특징
- 자식클래스를 통해 모든 추상메서드를 구현해야만 객체 생성 가능
- 모두 구현하지 않으면 자식클래스도 추상메서드를 포함하게 되어 객체 생성 불가
- 자식클래스에서 추상메서드를 반드시 구현하도록 강요
abstract class Animal{
public abstract void sound();
}
class Dog extends Animal{
public void sound() {
System.out.println("멍멍");
}
}
abstract class Mammal extends Animal{
public void breed(int n) {
System.out.println(n+"마리 새끼를 낳는다");
}
}
class Cow extends Mammal{
public void sound() {
System.out.println("음메");
}
}
public class AbstractClass {
public static void main(String[] args) {
// Animal a = new Animal(); //객체생성불가
Dog d = new Dog();
d.sound();
Animal an = new Dog(); // 다형성 가능
an.sound();
//Mammal m = new Mammal(); // 객체생성불가
Mammal m = new Cow();
m.sound();
m.breed(2);
}
}