본문 바로가기

JAVA/기본

추상 클래스 (abstract class) / 추상 메소드 (abstract method)

추상 클래스 (abstract class)

자식 클래스는 인스턴스 시키고 싶은데 부모껀 하기 싫다

*추상 클래스를 상속하면 자식도 추상 클래스 이기 때문에 인스턴스 생성이 안되고

인스턴스화 시키고 싶은 경우 재정의(override) 해야지만 가능하다.

 


추상 메소드 (abstract method)

추상 메소드 : 내용이 없고 형태만 있는 메소드

*추상 메소드를 가진 클래스는 무조건 추상 클래스가 되어야 한다.

 


추상 클래스는 인터페이스와 다르게 추상메소드를 구현 해야만 하진 않고 사용하고 싶거나 재정의하고 싶은 추상메소드를 골라서 구현 해야함

 

인터페이스는 무조건 부모가 가진 추상메소드를 모두 구현(재정의해서) 해야함

 

그래서 보통 abstract은 미완성된 설계도라고 보면되고 

interface는 설계도가 완성되서 그 설계도에 맞게 구현하는거라고 보면된다


추상 클래스 (abstract class) / 추상 메소드 (abstract method) 예시

public class C18abstract {
    public static void main(String[] args) {
        Dog18 dog1 = new Dog18();
        Cat18 cat1 = new Cat18();
        Animal18 d1 = dog1;
        Animal18 c1 = cat1;
        
        Animal18 ani1 = new Animal18(); //Animal18(상위클래스) 인스턴스 생성 안되게 하고싶다
    }
}

//추상클래스(abstract class)로 인스턴스 생성 불가
abstract class Animal19 {

    //추상 메소드 : 내용이 없고 형태만 있는 메소드
    //추상 메소드를 가진 클래스는 무조건 추상 클래스가 되어야 한다.
    abstract public void breath();
}

class dog19 extends Animal19 {

    //추상 메소드를 꼭 재정의(override) 해야지만 상속 받아 자식 클래스 사용 가능
    @Override
    public void breath() {
        System.out.println("폐로 숨을 쉽니다.");
    }
}

class Fish19 extends Animal19 {
    //이렇게 재정의를 안하면 얘도 추상 클래스 이기 때문에 인스턴스 생성 안됨
}