추상 클래스(Abstract Class)

msung99·2022년 2월 14일
0


추상클래스

여러 클래스들의 공통된 부분을 뽑아서 약식으로 뼈대만 정의해 놓은 부모 클래스

  • 추상 클래스로 부터 상속을 받고, 상속받은 메소드를 필요에 따라 더 자세히 정의한 후 (오버라이딩) 객체를 생성해서 사용하면 된다.

  • 추상 클래스에서 선언만 되어있고 정의가 되어있지 않은 메소드들이 존재할 수 있으므로, 필요에 따라 더 자세히 상속받은 메소드를 재정의 하라는것이다.


추상 클래스의 특징

  • 멤버변수를 가진다.

  • 추상 클래스를 상속하기 위해서는 extends 를 이용한다.

  • abstract 메소드를 가지며, 상속한 클래스에서 다시 제대로 구현해줘야 한다.

  • 일반 메소드도 가질 수 있다.

  • 일반 클래스와 마찬가지로 생성자도 있다.


추상클래스 구현

  • 클래스 상속과 마찬가지로 extends 키워드를 활용해 상속하고 abstract 메소드를 구현한다

  • 추상 메소드 : 추상 클래스 안에 선언만 되어 있고, 정의되지 않은 메소드. abstract 키워드로 추상 메소드임을 명시해준다.

=> 추상 메소드는 클래스에서 메소드 정의시 반드시 오버라이딩 해서 내용을 정의해줘야 한다.

추상 메소드의 외의 메소드들도 필요에 따라 메소드가 정의된 내용을 수정하고 싶다면 오버라이딩 하면 된다.

추상 메소드 선언 형태 : public abstract void 메소드명();


예제

추상 클래스인 AbstractClassEx 를 정의해 놓았다.
그런데 메소드 func() 는 추상 메소드이다. 오버라이딩 해줘야한다.

public abstract class AbstractClassEx{
  int num;
  String str;
  
  public AbstractClassEx() {
    System.out.println("AbstractClassEx 생성자1");
  }
  
  public AbstractClassEx(int i, String s){
    System.out.println("AbstractClassEx 생성자2");
  }
  
  this.num = i;
  this.str = s;
  
  public void fun1(){
    System.out.println(" == fun1() START == ");
  }
  
  // 추상 메소드 - 선언부만 있고 내용이 정의되지 않음
  // abstract 키워드를 써서 추상 메소드임을 명시함
  
  public abstract void fun2();
    
  }

우리는 아래처럼 클래스 정의시 fun2( ) 를 다시 오버라이딩 해서 반듯이 구현해야한다.

public class ClassEx extends AbstractClassEx {
  public classEx() {
    System.out.println("ClassEx 생성자");
  }
  
  public ClassEx(int i, String s) {
    super(i, s);
  }
  
  
  // 추상 메소드를 오버라이딩
  @Override
  public void fun2(){
    System.out.println("== fun2 START == ");
  }
}

main 함수

AbstractClassEx ex = new ClassEx(10, "Java");
ex.fun1();
ex.fun2();

추상 클래스 vs 인터페이스

공통점

  • 추상 메소드를 가진다.
  • 객체 생성이 불가능하며 자료형(타입)으로 사용된다.

차이점

  • 인터페이스
    • 상수, 추상메소드만 가진다.
    • 추상 메소드를 구현만 하도록 한다.
    • 다형성을 지원한다.
  • 추상 클래스
    • 클래스가 가지는 모든 속성과 기능을 가진다.
    • 추상 메소드 구현 및 상속의 기능을 가진다.
    • 단일 상속만 지원한다.
profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글