[210609] Abstract Class

iseeu95·2021년 6월 9일
0

Java

목록 보기
5/12

Abstract Class


추상 클래스란?

추상 클래스는 미완성된 클래스이다.

미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.

추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데 있어 그 바탕이 되는 부모 클래스로서의 중요한 의미를 갖는다. 왜냐하면 클래스를 작성함에 있어서 어느정도 작성된 상태에서 시작할 수 있기 때문이다.

클래스 앞에 abstract 키워드를 붙인다.

abstract class Car {
  abstract void accelrate();
}

abstract 키워드가 있는 클래스라고 모두 구현해야 하는 것은 아니다. 왜냐하면 단지 공유의 목적으로 abstract class를 만드는 경우도 있기 때문이다.

[추상 클래스의 목적]

기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 구현을 강제화한다. 메소드의 동작은 구현하는 자식 클래스에게 위임한다.
공유의 목적을 갖고 있다.

[추상 클래스의 특징]

추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다. 하지만 추상 메소드를 하나라도 포함하고 있다면 추상 클래스로 선언해야 한다.

추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로 인스턴스를 생성할 수 없다.

abstract class Animal {
  abstract void cry();
}

class Cat extends Animal {
  @Override
  void cry(){
    System.out.println("냐옹냐옹 ~~!");
  }
}

class Dog extends Animal {
  @Override
  void cry(){
    System.out.println("멍멍 ~~!");
  }
}

public class Test{
  public static void main(String[] args){
    // Animal animal = new Animal();
    // 추상 클래스는 자체적으로 인스턴스를 생성할 수 없다. 불완전하기 때문에.
    
    Cat cat = new Cat();
    Dog dog = new Dog();
    
    cat.cry();
    dog.cry();
    
  }
}

추상 클래스인 Animal은 추상 메소드인 cry()를 가지고 있으며, Animal 클래스를 상속받는 자식 클래스인 Dog, Cat 클래스는 cry() 메소드를 오버라이딩해야만 인스턴스를 생성할 수 있다.

추상 메소드

선언부만 작성하고 구현부는 작성하지 않는 메소드이며, 앞에 abstract 키워드를 붙인다.
구현부를 작성하지 않는 이유는 메소드의 내용이 상속받은 클래스에 따라 달라질 수 있기 때문이다.
사용하는 목적은 추상 메소드를 포함한 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 강제하기 위함이다.
추상 클래스를 상속받은 자식 클래스는 오버라이딩을 통해 조상인 추상 클래스의 추상 메소드를 모두 구현해야 한다.
만약, 자식 클래스에서 추상 메소드를 하나라도 구현하지 않는다면 자식 클래스 역시 추상 클래스로 지정해야 한다.

출처 : WooVictory

profile
Better than Yesterday

0개의 댓글