Theme. 추상 클래스

 선언만 있고 구현이 없는 메서드를 추상(abstract) 메서드라고 한다. 이러한 추상 메서드를 하나라도 포함한 클래스는 추상 클래스이다.

 추상 메서드와 추상 클래스는 키워드 abstract로 표시한다.

 하지만, 추상 클래스는 객체를 만들 수 없다. 따라서 서브 클래스를 만드는 용도로만 사용이 된다. (이때 추상 클래스가 수퍼 클래스가 되는 것)

 

블로그 내 "Scheduler 프로그램(java)" 게시물에서 추상 클래스를 사용하고 있는데,

superclass인 Event class를 다음과 같이 추상 클래스로 만들었고, 추상 메서드를 나타냈다.

 

 

이후, subclass인 OneDayEvent, DurationEvent, DeadlinedEvent class마다

isRelevant(MyDate date) 메서드를 구현하여 사용하였다. 상속관계이므로!

각 클래스마다 return 값이 다른데,

메인 클래스에서 events 배열의 각 칸이 참조하고 있는 subclass들의 객체에 따라 isRelevant(MyDate date) 메서드가 실행되도록 작성해주었다. 

 

Theme. 인터페이스

인터페이스는 "극단적인 추상 클래스"라고 말할 수 있다. 

추상 클래스와 이를 상속받는(extends) 클래스는 추상 클래스에서 보통 메서드와 데이터 멤버들은 상속 받고, 추상 메서드의 경우에는 자신(subclass)의 클래스 내에서 구현하는 것이지만, 

인터페이스는 오로지 추상 메서드만 가지고 있기 때문에 이를 implements 하는 클래스는 오로지 그 추상 메서드들을 실제로 구현해야 한다.

 

Theme. Interface vs Abstract class

추상 메서드로만 구성된 추상 클래스는 인터페이스와 완전히 동일한가?

그렇지 않다!

Java에서는 "다중 상속"을 허용하지 않는다. 하지만,  하나의 클래스가 여러 개의 Interface를 implement하는 것은 가능하다.

 

+ Recent posts