virtual
이 붙은 메서드와 속성, 인덱서는 재정의할 수 있지만 필수는 아니며 virtual
키워드가 포함된 클래스는 그 자체로도 완벽한 기능을 제공한다.클래스 내부에서 abstract
를 사용하려면 클래스 정의부에 abstract
키워드를 붙여줘야 한다.
abstract
키워드가 붙으면 그 자체로는 불완전해서 파생 클래스에서 반드시 재정의 해야 한다.
단, abstract
클래스 내부에 일반 메서드와 일반 멤버 변수를 정의할 수 있다
abstract
키워드는 인스턴스화할 수 없다.
추상 클래스의 사용 목적은 파생 클래스에게 공통적인 정의를 제공함과 동시에 각각의 파생 클래스에 사용될 기능을 강제적으로 재정의함에 있다.
interface
는 가장 높은 추상성을 제공한다.abstract
가 아닌 필드는 정의할 수 없다.abstract
와 interface
의 가장 큰 차이는 interface
는 다중 상속이 가능하다.interface
는 상속의 개념보단 기능을 확장하는 개념이다.interface
를 구현할 수 있다.interface
를 구현함으로써 관계가 형성되는데 이는 다형성으로 연결된다.