혼공자 ch7-3 추상클래스

Ada·2022년 10월 4일
0

항해TOL

목록 보기
18/63

[추상 클래스]

  • 실체 클래스(객체 생성용 클래스)들의 공통적인 특성(필드, 메소드)을 추출하여 선언한 것

  • 추상 클래스와 실체 클래스는 부모, 자식 클래스로서 상속 관계를 가짐

용도

  • 추상 클래스부터 만들고 실체 클래스를 만드는 것이 일반적

  • 실체 클래스에 반드시 존재해야할 필드와 메소드의 선언

  • 실체 클래스에는 공통된 내용은 빠르게 물려받고, 다른 점만 선언하면 되므로 시간 절약

  • 추상 클래스는 실체 클래스를 만들기 위한 설계 규격과 같은 역할을 한다고 생각

[추상 클래스 선언]

abstract 키워드

  • 상속을 통해 자식 클래스만 만들 수 있게 만들었기에 부모로서의 역할만 수행
    -> new 클래스() 가 불가능
    -> 즉, abstract 키워드를 사용한 클래스는 직접 객체 생성이 불가능

  • 추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드를 선언할 수 있음

  • 직접 객체를 생성할 수 없지만 자식 객체 생성될 때 객체화되어야 하기 때문에 생성자가 존재함

  • 자식 생성자에서 super() 형태로 추상 클래스의 생성자 호출

[추상 메소드와 재정의]

  • 메소드 선언만 동일하고 실행 내용은 실체 클래스마다 달라야 하는 경우에 사용
public abstract 리턴타입 메소드이름(매개변수,...);  // 중괄호 없음

// 예시
public abstract class Animal{
    public abstract void sound(); // 중괄호 없음, 즉 실행문이 없음 -> 재정의할 것이기에
}
  • abstract 키워드로 선언되고 중괄호가 없는 메소드

  • 추상 메소드를 상속받은 자식 클래스는 반드시 재정의(override)해서 실행 내용을 채워야 함 , 안하면 컴파일 에러 발생

(+++ 추상 클래스와 인터페이스의 차이가 없는 것 같다. 추상 클래스 안에는 추상 메서드와 일반 메서드 모두 포함 가능하다. 하지만 인터페이스는 모든 메서드가 추상 메서드이다.)

profile
백엔드 프로그래머

0개의 댓글