서론:
오버라이드 된 메소드가 있을 경우에는 부모타입으로 제어할 때라도 자식 타입의 오버라이드 된 메소드가 호출되며, 이 것이 실행 시간에 동적으로 바뀌기 때문에 동적 바인딩이라고 한다. 이 때, must implement(must Override)의 메소드가 있다면 부모 타입에서 이 메소드 구현을 강제할 수 있다. 부모 클래스/메소드에서 abstract를 통해 메소드 구현을 강제하였을 때 자식 클래스가 이를 구현하지 않는다면 compile 에러가 발생한다.
구현의 강제화:
public method를 추상 메소드로 만들 수 있다. -> public abstract void say(파라미터 선언 가능); body 부분이 없는 것이 특징이며, 클래스 역시 같은 abstract로 생성해야 한다.
ex.
public abstract class test{
public anstract void say();
}
추상 클래스 & 인터페이스:
공통점: 추상 메소드를 통해 구현을 강제할 수 있으며 객체화 할 수 없다.
3-1. 추상 클래스:
추상 메소드를 가지고 있는 일반 클래스이다. 따라서 일반적인 메소드의 구성요소인 필드, 메소드 등을 가질 수 있으며 이를 상속을 통해 자식 클래스에 물려줄 수 있다. 또한 추상 메소드는 0개 이상 가질 수 있다. 이 말은 곧, abstract 클래스로 선언하면서 동시에 abstract 메소드를 가지지 않을 수 있으며, 이러한 경우는 새로운 메소드 생성을 막기 위해 쓰인다. 반면에 abstract 메소드를 가지고 있다면 해당 메소드의 클래스는 반드시 abstract 클래스이어야 한다.
3-2.추상 메소드:
메소드 선언부(접근제한자, 리턴타입, 메소드명, 파라미터)만 있으며 이들의 작성은 필수이고, 몸통({구현부})이 없다. 추상메소드는 다른 이름으로는 미완성 메소드로 불리기도 하며, 이 미완성 메소드를 자식 클래스가 강제로 구현하도록 한다.
3-3. 추상화와 구체화:
구체적인 것들로부터 공통의 특성을 뽑아 내는 것이 추상화이다. 이에 반해 보다 대략적인 것들로부터 세부적인 사항들을 구현하는 것이 구체화이다. 즉 추상화는 대략적인 메소드를 부모 클래스가 선언해 두고, 이들의 구체화는 자식 메소드에게 맡긴다는 것으로 이해할 수 있다.
인터페이스
미완성 추상 메소드와 상수를 가진 추상메소드의 변형체. 일반 클래스는 인터페이스를 구현할 수 있으나, 추상 메소드는 반드시 오버라이딩 해야 한다. 이는 상속과 다르게 갯수의 제한 없이 다중 구현할 수 있다. 인터페이스 간의 구현은 상속으로 처리하며 하나의 부모 클래스처럼 사용이 가능하다.
ex.
class A implements B, C{}
ex.
interface A extends B,C,D
4-1. 자식 클래스에게 물려줄 필드나 메소드가 있으면 추상 클래스, 그렇지 않으면 인터페이스를 사용하는 것이 좋다.