11. 추상

2023. 3. 27. 17:46Lang/Java

728x90
반응형

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);
    }
}
728x90
반응형

'Lang > Java' 카테고리의 다른 글

13. 패키지  (0) 2023.03.27
12. 인터페이스  (0) 2023.03.27
10. 다형성  (0) 2023.03.27
9. 상속  (0) 2023.03.27
8. static  (0) 2023.03.27