누구나 이 둘을 혼동하기 쉬운데, 저도 마찬가지입니다. Li Jianzhong 선생님의 디자인 패턴을 들을 때 항상 추상 클래스를 인터페이스라고 언급하셔서 더욱 혼란스러워서 인터넷에서 정보를 찾아보았습니다. 정보.
1. 추상 클래스:
추상 클래스는 특수 클래스이지만 인스턴스화할 수 없습니다. 또한 클래스의 다른 특성도 가지고 있습니다. 일반 클래스에서는 할 수 없는 일. 추상 메서드는 추상 클래스에서만 선언할 수 있으며 파생 클래스는 이를 재정의해야 합니다. 또한 추상 클래스는 추상 클래스에서 파생될 수 있으며 기본 클래스의 추상 메서드를 재정의할 수 있습니다. 그렇지 않은 경우 파생 클래스가 이를 재정의해야 합니다.
2. 인터페이스:
인터페이스는 클래스와 유사한 참조 유형이며 추상 클래스와 세 가지 유사점이 있습니다.
1. 인스턴스화할 수 없습니다.
2. 구현되지 않은 메서드를 포함합니다. 선언;
3. 파생 클래스는 구현되지 않은 메서드를 구현해야 합니다. 추상 클래스는 추상 메서드이며 인터페이스는 모두 멤버(메서드뿐만 아니라 다른 멤버)입니다.
또한 인터페이스에는 다음과 같은 특징이 있습니다. 🎜>메서드 외에도 인터페이스에는 속성, 인덱서 및 이벤트가 포함될 수 있으며 이러한 멤버는 모두 공개로 정의됩니다. 또한 상수, 필드, 생성자, 소멸자 및 정적 멤버와 같은 다른 멤버를 포함할 수 없습니다. 클래스는 여러 인터페이스를 직접 상속할 수 있지만 하나의 클래스(추상 클래스 포함)만 직접 상속할 수 있습니다.
3. 추상 클래스와 인터페이스의 차이점:
1. 클래스는 객체의 추상화입니다. 추상 클래스는 클래스를 객체로 취급하는 것으로 이해될 수 있습니다. Microsoft의 사용자 정의 인터페이스 뒤에는 항상 "I can do it..." 클래스 유형을 표현한다는 것이 표시됩니다. 추상 클래스는 밀접하게 관련된 일련의 클래스 사이에서 더 많이 정의됩니다. 인터페이스는 대부분 느슨하게 관련되어 있지만 모두 특정 기능을 구현하는 클래스입니다.
2. 인터페이스는 기본적으로 상속의 특정 특성을 갖지 않으며 호출할 수 있는 메서드만 약속합니다.
3. 클래스 여러 인터페이스가 가능합니다. 한 번에 구현되지만 상위 클래스는 하나만 확장할 수 있습니다.
4. 인터페이스를 사용하여 콜백을 지원할 수 있지만 상속에는 이 기능이 없습니다.
5. 추상 클래스는 봉인될 수 없습니다.
6. 추상 클래스에 의해 구현된 특정 메소드는 기본적으로 가상이지만, 인터페이스를 구현하는 클래스의 인터페이스 메소드는 기본적으로 비가상입니다.
7. (인터페이스) 및 비추상 클래스와 유사하게 추상 클래스는 클래스의 기본 클래스 목록에 나열된 인터페이스의 모든 멤버에 대한 자체 구현도 제공해야 합니다. 그러나 추상 클래스는 인터페이스 메서드를 추상 메서드에 매핑할 수 있습니다.
8. 추상 클래스는 oop에서 변경 가능한 것과 변경 불가능한 것을 분리하는 원칙을 구현합니다. 추상 클래스와 인터페이스는 불변으로 정의되고, 가변 좌석 하위 클래스가 구현됩니다.
9. 좋은 인터페이스 정의는 다기능보다는 특정 기능을 가져야 합니다. 그렇지 않으면 인터페이스 오염이 발생할 수 있습니다. 클래스가 이 인터페이스의 한 가지 기능만 구현하고 인터페이스에 다른 메서드를 구현해야 하는 경우 이를 인터페이스 오염이라고 합니다.
10. 컴포넌트 기능 구현을 위해 상속을 사용하는 것을 지양하고, 블랙박스 재사용, 즉 객체 조합을 활용해보세요. 상속 수준이 증가하기 때문에 가장 직접적인 결과는 이 클래스 그룹의 특정 클래스를 호출할 때 해당 클래스를 모두 스택에 로드해야 한다는 것입니다! 결과는 상상할 수 있습니다. (스택 원리와 관련하여 이해됨) 동시에 관심 있는 친구들은 Microsoft가 클래스를 만들 때 종종 개체 조합 방법을 사용한다는 것을 알 수 있습니다. 예를 들어 asp.net에서 Page 클래스에는 서버 요청과 같은 속성이 있지만 실제로는 모두 특정 클래스의 개체입니다. Page 클래스의 이 개체를 사용하여 다른 클래스의 메서드와 속성을 호출하는 것은 매우 기본적인 디자인 원칙입니다.
11. 추상 클래스가 인터페이스를 구현하는 경우 인터페이스의 메서드를 구현하지 않고도 추상 클래스에 추상 메서드로 매핑하고 추상 클래스의 하위 클래스에 있는 인터페이스의 메서드를 구현할 수 있습니다. 🎜>
4. 추상 클래스 및 인터페이스 사용:
1. 구성 요소의 여러 버전을 생성할 것으로 예상되는 경우 추상 클래스를 생성합니다. 추상 클래스는 구성 요소 버전을 제어하는 간단한 방법을 제공합니다.
2. 생성된 기능이 다양한 서로 다른 객체에서 사용될 경우 인터페이스를 사용합니다. 작고 간결한 기능 블록을 디자인하려면 인터페이스를 사용하십시오.
3. 큰 기능 단위를 디자인하려면 추상 클래스를 사용하세요. 모든 구성 요소 구현 간에 공통적으로 구현된 기능을 제공하려면 추상 클래스를 사용하세요.
4. 추상 클래스는 주로 밀접하게 관련된 객체에 사용됩니다. 인터페이스는 관련 없는 클래스에 공통 기능을 제공하는 데 적합합니다.
온라인에서 본 몇 가지 은유는 다음과 같습니다. 정말 좋습니다. 헤헤:
1. 비행기는 날 수 있고 새는 둘 다 동일한 인터페이스 "날기"를 상속하지만 F22는 항공기 추상 클래스에 속하고 비둘기는 새 추상 클래스에 속합니다.
2. 철문과 나무 문이 모두 문인 것처럼(추상 클래스) 원하는 문을 줄 수는 없지만(인스턴스화할 수 없음) 특정 철문이나 나무 문은 줄 수 있습니다(다형성) ); 문만 될 수 있으며 창(단일 상속)이라고 말할 수는 없습니다. 문에는 자물쇠(인터페이스) 또는 초인종(다중 구현)이 있을 수 있습니다. 문(추상 클래스)은 사용자가 무엇인지 정의하고 인터페이스(잠금)는 사용자가 무엇을 할 수 있는지를 규정합니다(인터페이스는 한 가지 작업만 수행해야 하며 잠금 장치에 소리를 내도록 요청할 수 없습니다(인터페이스 오염)).
위 내용은 C#의 추상 클래스와 인터페이스의 차이점입니다. 자세한 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!