public abstract class BaseClass {
public abstract void display();
}
public class DerivedClass extends BaseClass {
@Override
public void display() {
System.out.println("DerivedClass Display");
}
}
C#에서 비슷한 개념의 Virtual도 있는데 의미가 살짝 다르다.
C#で似たような概念のVirtualもありますが、意味が少し違がう。
C#의 virtual:
메서드, 속성, 이벤트 등을 오버라이드할 수 있도록 합니다.
기본 구현을 제공할 수 있습니다.
파생 클래스에서 선택적으로 오버라이드할 수 있습니다.
Java의 abstract:
메서드에 대한 기본 구현을 제공하지 않습니다.
반드시 파생 클래스에서 구현해야 합니다.
클래스 자체도 abstract로 선언할 수 있으며, 이 경우 인스턴스화할 수 없습니다.
public class BaseClass {
public virtual void Display() {
Console.WriteLine("BaseClass Display");
}
}
public class DerivedClass : BaseClass {
public override void Display() {
Console.WriteLine("DerivedClass Display");
}
}
Virtual과 Abstract 둘다 기능이라고 생각한다. 물론 C#에도 abstract가 존재한다.
공통점은 모으고 차이점은 버리는 기능.
共通点は集めて、違いは捨てる機能。
이게 핵심 의미라고 생각한다.