본문 바로가기

JAVA/복습

추상클래스

 

추상 클래스란 구체적이지 않은 클래스를 의미

독수리, 타조는 구체적인 새를 지칭하는데 새, 포유류 같은 것은 구체적이지 않다.

이런 것을 구현한 클래스를 추상 클래스라고 한다.

 

이렇게 모호한 단어들을 가진 클래스들은 부모로서의 역할은 수행할 수 있지만, 

객체는 될 수 없다.

 

객체가 될 수 있는 것은 구체적인 클래스들만 가능하다.

 


추상 클래스 정의하기

  • 추상 클래스는 클래스 앞에 abstract 키워드를 이용해서 정의한다.
  • 추상 클래스는 미완성의 추상 메소드를 포함할 수 있다.
    • 추상 메소드란, 내용이 없는 메소드 이다. 즉 구현이 되지 않은 메소드이다.
    • 추상 메소드는 리턴 타입 앞에 abstract라는 키워드를 붙여야 한다.
  • 추상 클래스는 인스턴스를 생성할 수 없다.
package Java02;

//  추상클래스
public abstract class Bird {

    // 추상클래스를 정의하는 방법
    public abstract void sing(); //나는 추상메소드예요. public abstract~

    // 추상클래스에서 추상메소드 외에도 일반 메소드도 구현가능.
    public void fly() {
        System.out.println("날다");
    }

}

 

추상 클래스를 상속받는 클래스 생성하기

  • 추상 클래스를 상속받은 클래스는 추상 클래스가 갖고 있는 추상 메소드를 반드시 구현해야 한다.
  • 추상 클래스를 상속받고, 추상 클래스가 갖고 있는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.
package Java02;

public class Duck extends Bird{


    // Bird가 갖고 있었던 추상메소드인 sing()가 구현이되어야하기때문에  오버라이드해주어야한다.
    @Override
    public void sing() {
        System.out.println("꽥꽥!!");
    }
}

 

사용하기

  • Bird는 추상 클래스 이므로 객체를 생성할 수 없다.
package Java02;

public class DuckExam {
    public static void main(String[] args) {

        Duck duck = new Duck();
        duck.sing();
        duck.fly(); //Duck에서 Bird를 상속 받았기때문에 구현하지 않았지만 fly()를 사용할 수 있다.

        //Bird b = new Bird();
        // --오류--
        //실제 버드라고 하는 클래스는 추상클래스는 부모로서의 역할은 가능하지만
        //추상클래스를 이용해서 객체를 생성할 수 없다.

    }
}

'JAVA > 복습' 카테고리의 다른 글

오버라이딩(Overriding)  (0) 2021.10.11
super & 부모생성자  (0) 2021.10.11
접근제한자  (0) 2021.10.11
패키지  (0) 2021.10.09
[프로그래머스] 생성자 오버로딩 실습 (복습필요)  (0) 2021.10.09