객체 지향 프로그래밍의 경우 추상화는 주요 기능 중 하나입니다. Java에서는 OOP 추상화가 인터페이스와 추상 클래스의 두 가지 형태로 반영 될 수 있습니다. 이 둘 사이에는 너무 많은 유사점과 차이가 너무 많습니다. 많은 사람들은 초보자 일 때 상호 교환 적으로 사용할 수 있다고 생각하지만 실제로는 그렇지 않습니다. 오늘 우리는 Java의 인터페이스와 추상 클래스에 대해 배울 것입니다. 이 기사의 디렉토리 개요는 다음과 같습니다.
1. 초록 수업
2. 인터페이스
3. 추상 클래스와 인터페이스의 차이
1. 초록 수업
추상 수업을 이해하기 전에 먼저 추상 방법을 이해해 봅시다. 추상 방법은 특별한 방법입니다. 선언이 있지만 구체적인 구현은 없습니다. 추상 방법의 선언 형식은 다음과 같습니다.
초록 void fun ();
초록 방법은 추상 키워드로 수정해야합니다. 수업에 초록 방법이 포함 된 경우이 클래스는 추상 클래스라고합니다. 추상 클래스는 수업 전에 추상 키워드로 수정해야합니다. 추상 클래스에는 구체적인 구현이없는 방법이 포함되어 있기 때문에 추상 클래스를 사용하여 객체를 만들 수 없습니다.
다음과 같은 문제는 다음과 같습니다. "Java Programming Thought"책에서, 초록 클래스는 "추상 방법을 포함하는 클래스"로 정의되지만 나중에 클래스에 초록 메소드가 포함되어 있지 않고 추상적으로 수정되면 추상 클래스입니다. 다시 말해, 추상 클래스에 반드시 추상적 인 방법을 포함 할 필요는 없습니다. 나는 개인적으로 이것이 완고한 질문이라고 생각합니다. 추상 클래스에 추상적 인 방법이 포함되어 있지 않으면 왜 추상 클래스로 설계되어야합니까? 따라서 당분간이 개념을 기억하십시오. 왜 그런지 파헤칠 필요가 없습니다.
[public] Abstract classname {Abstract void fun ();}이것으로부터 우리는 추상 클래스가 상속을 위해 존재한다는 것을 알 수 있습니다. 추상 클래스를 정의하지만 상속하지 않으면이 추상 클래스를 헛된 것으로 만드는 것과 같습니다. 부모 클래스의 경우, 메소드 중 하나가 부모 클래스에서 구현되면 의미가 없으며 서브 클래스의 실제 요구에 따라 다르게 구현되어야합니다.이 방법은 추상 방법으로 선언 될 수 있으며이 클래스는 추상 클래스가됩니다.
추상 방법을 포함하는 클래스를 추상 클래스라고하지만 추상적 인 방법은 추상 클래스에서만 찾을 수 있다는 것을 의미하지는 않습니다. 일반 클래스와 마찬가지로 회원 변수와 일반 멤버 방법도 가질 수 있습니다. 추상 클래스와 일반 클래스에는 세 가지 주요 차이점이 있습니다.
1) 추상 방법은 공개적이거나 보호되어야합니다 (개인이라면 서브 클래스에 의해 상속 될 수없고 서브 클래스는 메소드를 구현할 수 없기 때문에). 기본적으로 공개적입니다.
2) 추상 클래스는 개체를 만드는 데 사용될 수 없습니다.
3) 클래스가 추상 클래스에서 상속되는 경우 서브 클래스는 상위 클래스의 추상 방법을 구현해야합니다. 서브 클래스가 상위 클래스의 추상 메소드를 구현하지 않으면 서브 클래스도 추상 클래스로 정의되어야합니다.
다른 측면에서는 추상 클래스와 일반 클래스 사이에는 차이가 없습니다.
2. 인터페이스
소프트웨어 엔지니어링에서 영어로 인터페이스라고 불리는 인터페이스는 일반적으로 다른 사람들이 호출 할 수있는 방법이나 기능을 나타냅니다. 이것으로부터, 우리는 행동의 추상화 인 Java 언어 디자이너의 원래 의도를 이해할 수 있습니다. Java에서는 인터페이스의 형태는 다음과 같습니다.
[public] 인터페이스 인터페이스 이름 {}
인터페이스에는 변수와 메소드가 포함될 수 있습니다. 그러나 인터페이스의 변수는 공개 정적 최종 변수로 암시 적으로 지정 될 것이며 (공개 정적 최종 변수 일 수 있으며, 개인 수정은 컴파일 오류를보고 할 수 있음), 메소드는 공개 추상 방법으로 암시 적으로 지정 될 것이며 공개 추상 방법으로 만 공개적으로 지정되며 (개인적으로 보호 될 수없고, 정적, 마지막 방법에 따라 계산 할 수 없을 것입니다. 구현, 즉 인터페이스의 메소드는 추상적 인 메소드 여야합니다. 여기에서 인터페이스와 추상 클래스의 차이점을 모호하게 볼 수 있습니다. 인터페이스는 매우 추상적 인 유형입니다. 추상 클래스보다 "추상적"이므로 일반적으로 인터페이스에서 변수를 정의하지 않습니다.
클래스가 특정 인터페이스 그룹을 따르려면 Ampess 키워드를 사용해야합니다. 특정 형식은 다음과 같습니다.
클래스 클래스 이름은 interface1, interface2, [....] {}를 구현합니다.
클래스는 여러 특정 인터페이스를 따라갈 수 있음을 알 수 있습니다. 비 임금 클래스가 인터페이스를 따르는 경우 해당 인터페이스의 모든 메소드를 구현해야합니다. 인터페이스를 따르는 추상 클래스의 경우 해당 인터페이스의 초록 메소드가 구현되지 않을 수 있습니다.
3. 추상 클래스와 인터페이스의 차이
1. 문법 수준에서의 차이
1) 초록 클래스는 회원 방법의 구현 세부 사항을 제공 할 수 있지만, 인터페이스에는 공개 추상 방법 만 존재할 수 있습니다.
2) 추상 클래스의 멤버 변수는 다양한 유형 일 수 있지만 인터페이스의 멤버 변수는 공개 정적 최종 유형 일 수 있습니다.
3) 인터페이스에는 정적 코드 블록과 정적 메소드를 포함 할 수 없지만 추상 클래스에는 정적 코드 블록과 정적 메소드가있을 수 있습니다.
4) 클래스는 하나의 초록 클래스 만 상속받을 수 있지만 클래스는 여러 인터페이스를 구현할 수 있습니다.
2. 디자인 수준에서의 차이
1) 초록 클래스는 사물의 추상화, 즉 클래스의 추상화이며 인터페이스는 행동의 추상화입니다. 초록 수업은 속성과 행동을 포함하여 전체 클래스를 초록하지만 인터페이스는 클래스 부분 (동작)을 추상화합니다. 간단한 예를 들기 위해 비행기와 조류는 다른 것이지만 모두 공통점이 있습니다. 즉, 모두 비행합니다. 그런 다음 디자인 할 때 항공기는 비행기와 새 같은 특성으로 설계 될 수 있지만 비행 특성은 클래스로 설계 될 수 없습니다. 따라서 그것은 단지 행동 특성 일뿐 아니라 유형의 사물에 대한 추상적 인 설명이 아닙니다. 이 시점에서 비행은 Method Fly ()를 포함하여 인터페이스 파리로 설계 될 수 있으며 비행기와 조류는 자체 요구에 따라 플라이 인터페이스를 구현합니다. 그런 다음 전투기, 시민 항공기 등과 같은 다른 유형의 항공기와 관련하여 비행기를 직접 상속받을 수 있습니다. 새와 비슷합니다. 다양한 유형의 새가 새 클래스를 직접 상속받을 수 있습니다. 여기에서 상속은 "예 여부"관계이며 인터페이스 구현은 "예 여부"관계임을 알 수 있습니다. 클래스가 추상 클래스를 상속하는 경우, 서브 클래스는 추상 클래스의 유형이어야하며 인터페이스 구현은 새가 날 수 있는지 (또는 비행 특성을 가지고 있는지)와 같이 존재하지 않는 관계입니다. 날 수 있다면이 인터페이스를 실현할 수 있습니다. 날 수 없다면이 인터페이스를 깨닫지 못할 것입니다.
2) 다른 디자인 수준, 초록 클래스는 많은 서브 클래스의 부모 클래스로서 템플릿 디자인입니다. 인터페이스는 행동 강령이며 방사선 설계입니다. 템플릿 디자인이란 무엇입니까? 가장 간단한 예는 모든 사람이 PPT에서 템플릿을 사용했다는 것입니다. PPT B 및 PPT C를 설계하기 위해 템플릿 A를 사용하는 경우 PPT B 및 PPT C의 공통 부분은 템플릿 A입니다. 공개 부품을 변경 해야하는 경우 템플릿 A 만 변경하면 PPT B 및 PPT C를 다시 변경할 필요가 없습니다. 즉, 추상 클래스의 경우 새 방법을 추가 해야하는 경우 초록 클래스에 특정 구현을 직접 추가 할 수 있으며 서브 클래스를 변경할 수 없습니다. 그러나 인터페이스의 경우 불가능합니다. 인터페이스가 변경되면이 인터페이스를 구현하는 모든 클래스는 그에 따라 변경되어야합니다.
인터넷에서 가장 널리 유포 된 예를 보자 : 문과 알람의 예 : 문에는 Open ()과 Close ()의 두 가지 작업이 있습니다. 현재, 우리는 추상 클래스와 인터페이스를 통해이 추상 개념을 정의 할 수 있습니다.
초록 클래스 도어 {public acpract void oloven (); 공개 초록 void close ();}또는:
인터페이스 도어 {public Abstract void Open (); 공개 초록 void close ();}그러나 이제 우리가 Alarm ()의 기능을 갖기 위해 문이 필요하다면 그것을 구현하는 방법은 무엇입니까? 다음 두 가지 아이디어가 제공됩니다.
1) 세 가지 기능을 모두 추상 클래스에 넣지 만, 이런 방식 으로이 추상 클래스에서 상속 된 모든 서브 클래스에는 경보 기능이 있지만 일부 도어에는 반드시 경보 기능이있는 것은 아닙니다.
2)이 세 가지 기능을 모두 인터페이스에 넣으십시오. 알람 함수를 사용해야하는 클래스는이 인터페이스에서 Open () 및 Close ()를 구현해야합니다. 아마도이 클래스에는 화재 경보와 같은 Open ()과 Close ()의 두 기능이 없을 것입니다.
여기에서 도어의 Open (), Close () 및 alarm ()이 단순히 다른 범주의 두 가지 동작에 속하는 것을 볼 수 있습니다. Open () 및 Close ()는 게이트 자체의 고유 한 동작 특성에 속하며 Alarm ()은 확장 된 추가 동작에 속합니다. 따라서 최상의 솔루션은 알람 () 동작을 포함한 인터페이스로서 알람을 인터페이스로 설계하고 문을 열고 가까운 동작을 포함하여 별도의 추상 클래스로서 도어를 설계하는 것입니다. 다른 알람 게이트는 도어 클래스를 상속하고 알람 인터페이스를 구현하도록 설계되었습니다.
interface alram {void alarm ();} Abstract Class Door {void open (); void close ();} 클래스 알람 도어 확장 도어 구현 알람 {void oepn () {// ..} void close () {// ..} void alarm () {// ...}}위의 것은 Java 인터페이스 및 추상 클래스의 편집입니다. Java 프로그래밍을 배우는 친구들을 도울 수 있기를 바랍니다.