메소드, 속성, 인덱서 또는 이벤트 선언을 한정하는데 사용된다.
자식 클래스에서 필요에 따라 오버라이드할 수 있지만 반드시 할 필요는 없다.
자체적으로 구현할 수 있다.
자식 클래스에서 구현해야하는 클래스 및 멤버, 메소드를 만들 수 있다.
여러 자식 클래스에서 공유할 기본 클래스의 공통적인 정의를 제공한다. 즉, 반드시 오버라이드 해야 한다.
자체적으로 구현할 수 없다.
추상 클래스는 인스턴스화(객체 생성)할 수 없다.
추상 클래스는 구현을 갖되, 인스턴스를 가질 수 없다.
추상 클래스는 추상 메소드를 가질 수 있다.
추상 메소드는 구현을 갖지 못하지만 파생클래스에서 반드시 구현하도록 강제한다.
즉, 추상 클래스를 상속하는 클래스들이 반드시 이 메소드를 가질 거라는 약속이다.
- 클래스가 따라야 하는 약속이다.
- 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야 할지를 정의한다.
Abstract와 비슷하게 자식 클래스에서 공유할 공통 정의를 제공하지만, 멤버필드를 갖지 않는다. 대신 프로퍼티는 사용이 가능하다.
여러 자식 클래스가 공통적으로 가질 기능을 추가하기 위해 사용한다. 즉, Abatract와 같이 반드시 오버라이드 해야 한다.
자체적으로 구현할 수 없고, 인스턴스화(객체 생성)할 수 없다.
접근제한자는 public만 사용이 가능하다.
Virtual | Abstract | Interface | |
---|---|---|---|
구현 | 기본 구현 가능 | 구현 불가 | 구현 불가 |
오버라이딩 | 선택 | 필수 | 필수 |
목적 | 기본 기능을 override될 수 있도록 제공 | 자식 클래스가 공유할 공통 정의를 제공 | 자식 클래스가 공통적으로 가질 기능을 추가 |
호환되지 않는 키워드 | static, abstract, private, override | static, virtual | static, abstract, private, protected, virtual |