이 기사에서는 Java 인터페이스 및 추상 클래스의 사용에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
인터페이스
1 Java는 인터페이스가있는 여러 상속을 지원하지 않기 때문에 클래스는 하나의 부모 클래스 만 상속받을 수 있지만 여러 인터페이스를 구현할 수 있으며 인터페이스 자체는 여러 인터페이스를 상속받을 수 있습니다.
2 인터페이스의 멤버 변수는 기본적으로 공개 정적 최종 유형입니다. 표시 해야하는 초기화.
3 인터페이스의 메소드는 기본적으로 공개 초록입니다. 암시 적 선언.
4 인터페이스에는 생성자가 없으며 인스턴스화 할 수 없습니다.
5 인터페이스는 다른 인터페이스를 구현할 수 없지만 여러 인터페이스를 상속 할 수 있습니다.
6 클래스가 인터페이스를 구현하는 경우 인터페이스의 모든 추상 방법을 구현해야합니다. 그렇지 않으면 클래스는 추상 클래스로 정의되어야합니다.
초록 수업
1 클래스가 추상으로 선언되면이 클래스는 객체를 생성 할 수 없으며 상속 만 사용할 수 있습니다.
2 초록 방법은 추상 클래스에 존재해야합니다.
3 추상 클래스에는 일반적인 변수와 일반적인 방법이있을 수 있습니다.
4 서브 클래스는 하위 클래스가 추상 클래스가 아닌 한 초록 클래스는 추상적 인 메소드를 구현해야합니다.
개인 void print () {}; 이 명령문은 메소드의 빈 구현을 나타냅니다.
Abstract void print (); 이 문장은 구현없이 메소드의 추상화를 나타냅니다.
인터페이스와 추상 클래스의 차이점
1 인터페이스에는 추상 방법 만 포함 할 수 있으며 추상 클래스에는 일반적인 방법이 포함될 수 있습니다.
2 인터페이스는 정적 상수 특성 만 정의 할 수 있습니다. 초록 클래스는 일반 특성과 정적 상수 특성을 모두 정의 할 수 있습니다.
3 인터페이스에는 생성자 방법이 포함되어 있지 않으며, 추상 클래스에는 생성자 방법이 포함될 수 있습니다.
초록 클래스를 인스턴스화 할 수는 없지만 생성자가 없다는 것을 의미하지는 않습니다. 초록 클래스는 생성자를 가질 수 있으며 교체 클래스입니다.
1 인터페이스는 핵심이며,해야 할 일을 정의하고 많은 방법을 포함하지만 이러한 방법을 수행 해야하는 방식을 정의하지는 않습니다.
2 많은 클래스가 인터페이스를 구현하면 각 클래스가 코드에서 해당 메소드를 구현해야합니다.
3 일부 클래스의 구현에 공통점이 있으면 추상 클래스가 추상 클래스가 인터페이스의 공통 코드를 구현할 수 있도록 추상 클래스를 추상화 할 수 있으며, 해당 개인화 된 방법은 각 서브 클래스에 의해 구현됩니다.
따라서 추상 클래스는 인터페이스의 구현을 단순화하도록 설계되었습니다. 공개 방법의 구현을 제공 할뿐만 아니라 신속하게 개발할 수있을뿐만 아니라 클래스가 엄격한 커플 링 문제없이 모든 방법을 스스로 구현할 수 있습니다.
응용 프로그램은 매우 간단합니다
1. 먼저 인터페이스를 정의하십시오
2 공통 부품이있는 여러 인터페이스 구현이있는 경우 추상 클래스를 사용하고 통합하십시오.
인터페이스와 추상 클래스의 차이점은 당신이 그것을 읽은 후에 혼란스러워하지 않을 것이라고 믿는다.
객체 지향 프로그래밍 언어를 사용하는 프로그래머의 경우 "인터페이스"라는 용어는 친숙해야하지만, 그러한 의심이 있는지 궁금합니다. 인터페이스의 목적은 무엇입니까? 그것과 추상 수업의 차이점은 무엇입니까? 인터페이스 대신 초록 클래스를 사용할 수 있습니까? 또한 프로그래머로서 종종 "인터페이스 지향 프로그래밍"이라는 문구를 들으려면 무엇을 의미합니까? 이데올로기 적 의미는 무엇입니까? 객체 지향 프로그래밍과의 관계는 무엇입니까? 이 기사는 이러한 질문에 하나씩 답변 할 것입니다.
1. 인터페이스 지향 프로그래밍과 객체 지향 프로그래밍의 관계는 무엇입니까?
우선, 인터페이스 지향 프로그래밍 및 객체 지향 프로그래밍은 수평이 아닙니다. 객체 지향 프로그래밍보다 더 발전된 독립적 인 프로그래밍 아이디어는 아니지만 객체 지향적 사고 시스템에 첨부되어 그 부분에 속합니다. 다시 말해, 그것은 객체 지향 프로그래밍 시스템에서 사고의 본질 중 하나입니다.
2. 인터페이스의 특성
인터페이스는 차체 코드가없는 여러 메소드 정의로 표면적으로 구성됩니다. 고유 한 이름을 가지며 클래스 또는 기타 인터페이스에서 구현할 수 있습니다 (또는 상속 될 수도 있음). 다음과 같은 형태처럼 보일 수 있습니다.
인터페이스 interfaceName {void method1 (); void method2 (int para1); void method3 (String para2, String para3); }그렇다면 인터페이스의 본질은 무엇입니까? 아니면 인터페이스의 존재의 의미는 무엇입니까? 다음 두 가지 관점에서 고려 될 수 있다고 생각합니다.
1) 인터페이스는이 인터페이스를 구현하는 클래스 또는 인터페이스에 일련의 규칙을 지정하는 일련의 규칙입니다. 그것은 자연의 개념을 구현합니다.
예를 들어, 자연적으로 사람들은 먹을 수 있습니다. 즉, "인간이라면 먹을 수 있어야합니다." 그런 다음 컴퓨터 프로그램에서 시뮬레이션되면 iPerson이 있어야합니다 (사용자 정의 적으로 인터페이스 이름은 "i"로 시작) 인터페이스가 있으며 Eat ()라는 메소드가 있습니다. 그런 다음 "인간"을 나타내는 모든 클래스는 "인간이라면 먹을 수 있어야한다"라는 자연스러운 규칙을 시뮬레이션하는 iPerson 인터페이스를 구현해야한다고 규정합니다.
여기에서 객체 지향적 인 아이디어를 볼 수 있다고 생각합니다. 객체 지향적 사고의 코어 중 하나는 현실 세계를 시뮬레이션하고 현실 세계의 추상을 범주로 추상화하는 것입니다. 전체 프로그램은 다양한 유형의 사례에 의존하여 서로 통신하고 서로 협력하여 시스템 기능을 완료합니다. 이것은 실제 세계의 운영 조건과 매우 일치하며 대상 지향적 사고의 본질이기도합니다.
2) 인터페이스는 특정 세분화 된 관점에서 유사한 것들을 추상적으로 표현합니다. 여기서 나는 "같은 것"이라는 개념이 상대적이기 때문에 특정 세분화 된 견해를 강조한다는 점에 유의하십시오.
예를 들어, 내 눈에는 나는 사람이고 나와 돼지 사이에는 근본적인 차이가 있습니다. 나는 내 반 친구들과 나는 동일하다는 진술을 받아 들일 수 있지만, 나는 돼지와 동일하다는 것을 받아들이지 말아야한다. 그러나 동물 학자의 눈이 돼지와 같다면, 나는 우리 모두가 동물이기 때문에 동일해야합니다. 그는 "인간"과 "돼지"가 모두 Ianimal 인터페이스를 구현했다고 생각할 수 있습니다. 그가 동물의 행동을 연구 할 때, 그는 나와 돼지를 별도로 치료하지는 않지만 더 큰 입자 크기의 "동물"에서 그것을 연구 할 것이지만, 나와 나무 사이에는 필수적인 차이가 있다고 생각할 것입니다.
이제 나는 유전 학자로 바뀌 었으므로 상황은 다릅니다. 모든 생명체가 그의 눈에 물려받을 수 있기 때문에, 나는 돼지와 다르지 않을뿐만 아니라 모기, 박테리아, 나무, 버섯 또는 SARS 바이러스와는 다르기 때문에 우리는 모두 우리 모두가 잘 알려진 인터페이스를 구현했다고 생각할 것이기 때문에 (주 : 내려 오기 VI. 상속), 우리는 모두 그녀가 그녀의 모든 것입니다. 그는 우리를 별도로 공부하지는 않지만 모든 생물을 비슷한 유형으로 연구 할 것입니다. 그의 눈에는 인간과 바이러스 사이에는 차이가 없으며 유전성 물질과 비 유쾌한 물질만이 없습니다. 그러나 적어도 나와 돌 사이에는 여전히 차이가 있습니다.
그러나 불행히도 언젠가는 레닌이라는 이름의 위대한 사람이 지구상에 나타났습니다. 그는 Max와 Engels의 변증 법적 유물주의 걸작에 익숙한 후 많은 경험을 가지고 있었기 때문에 유명한 정의를주었습니다. 소위 물질은 의식에 의해 반영 될 수있는 객관적인 현실입니다. 이 시점에서 나는 더 이상 돌, 공기 흔적, 관용구 및 휴대 전화 신호를 전달하는 전자기장과 더 이상 다르지 않습니다. 레닌의 눈에서 우리는 모두 의식에 의해 반영 될 수있는 객관적인 현실이기 때문입니다. Lenin이 프로그래머라면, 그는 다음과 같이 말할 것입니다. 소위 물질은 두 인터페이스 "irireflectabe"및 "iesse"를 구현하는 모든 클래스에서 생성 된 사례입니다. (참고 : 반영 v. Esse n. 객관적인 현실을 반영합니다)
어쩌면 당신은 위의 내 예제가 말도 안되는다고 생각할 것입니다. 그러나 이것이 바로 인터페이스의 의미입니다. 객체 지향적 아이디어와 핵심 중 하나는 다형성입니다. 다형성이란 무엇입니까? 무뚝뚝하게 말하면, 비슷한 것을 특정 세분화 수준에서 무차별 적으로 취급하고 균일하게 처리하는 것입니다. 그리고 내가 이것을 감히 해야하는 이유는 인터페이스가 있기 때문입니다. 그 유전 학자와 마찬가지로, 그는 모든 유기체가 edscendable 인터페이스를 구현했다는 것을 이해했습니다. 그들이 유기체 인 한, descend () 방법이 있어야하므로 각 유기체를 개별적으로 연구하고 결국 소진하지 않고 통일 된 방식으로 연구 할 수 있습니다.
어쩌면 우리는 인터페이스의 본질과 기능에 대한 직관적 인 인상을 줄 수 없습니다. 그런 다음 다음 예제와 여러 설계 패턴의 분석에서 인터페이스의 의미를보다 직관적으로 경험하게됩니다.
3. 인터페이스 지향 프로그래밍 요약
위의 기사를 통해 인터페이스와 인터페이스의 이데올로기 적 의미를 이해하고 있다고 생각합니다. 그렇다면 인터페이스 지향 프로그래밍이란 무엇입니까? 저의 개인적 정의는 : 시스템 분석 및 아키텍처에서 계층 구조와 종속성을 구별합니다. 각 레벨은 상단 계층에 직접 서비스를 제공하지 않고 (즉, 상단 계층에서 직접 인스턴스화되지는 않지만 대신 인터페이스 세트를 정의하고, 인터페이스 함수를 상단 레이어에만 노출시킵니다. 상부 층은 하부 층에만 의존하며 특정 클래스에 의존하지 않습니다.
이를 수행 할 때의 이점은 분명하며, 우선 시스템 유연성에 매우 유리합니다. 인터페이스 및 인터페이스 함수가 변경되지 않은 한 하단 계층을 변경 해야하는 경우 상단 층은 수정을 할 필요가 없습니다. WD 60G 하드 드라이브를 Seagate 160G 하드 드라이브로 교체하는 것처럼 상단 계층 코드를 변경하지 않고 하단 계층을 교체 할 수도 있습니다. 컴퓨터의 다른 부분을 변경할 필요는 없지만 컴퓨터의 다른 부분은 특정 하드 드라이브에 의존하지 않고 IDE 인터페이스에만 의존하기 때문에 원래 하드 드라이브를 뽑고 새 하드 드라이브를 연결할 필요가 없습니다. 하드 드라이브 가이 인터페이스를 구현하는 한 교체 할 수 있습니다. 여기에서 프로그램의 인터페이스는 현실의 인터페이스와 매우 유사하므로 인터페이스라는 단어가 정말 유사하다고 믿었습니다!
인터페이스를 사용하는 또 다른 장점은 다른 구성 요소 또는 레벨의 개발자가 하드 디스크를 구축하는 사람들과 마찬가지로 CPU 또는 모니터를 만들 필요가없는 것처럼 구조를 병렬로 시작할 수 있다는 것입니다. 인터페이스가 일관되고 설계가 합리적 인 한 개발을 병렬로 수행 할 수 있으므로 효율성이 향상됩니다.
이 기사는 먼저 여기에 올 것입니다. 마지막으로, 나는 다른 말을하고 싶습니다. 객체 지향의 본질은 현실을 시뮬레이션하는 것입니다. 이것은 또한 내 기사의 영혼이라고 할 수 있습니다. 따라서 현실에서 객체 지향 사항에 대해 더 많이 생각하면 시스템 분석 및 설계 기능을 향상시키는 데 큰 도움이 될 것입니다.
다음 기사에서는 기본 인터페이스 프로그래밍 방법을 보여주기 위해 예제를 사용합니다.
세 번째 기사에서는 클래식 디자인 패턴의 인터페이스 지향 프로그래밍 아이디어를 분석하고 .NET 계층 구조에서 인터페이스 지향 아이디어를 분석합니다.
이 기사에 보충 :
답장을주의 깊게 읽은 후에는 기술적 인 문제에 대해 매우 기쁘게 생각합니다. 긍정을 한 친구들과 의견과 질문을 제시 한 친구들에게 감사드립니다. 여기에 응답에서 더 집중된 문제 중 일부를 논의하기 위해 무언가를 추가하고 싶습니다.
1. "인터페이스 지향 프로그래밍"의 두 단어 "인터페이스"와 특정 객체 지향 언어 "인터페이스"에 대해
나는 "인터페이스 지향 프로그래밍"의 "인터페이스"라는 단어가 간단한 프로그래밍 언어의 인터페이스보다 더 큰 범위를 가져야한다고 제안하는 친구를 보았습니다. 그것에 대해 생각한 후, 나는 그것이 의미가 있다고 생각했습니다. 내가 여기에 쓴 것은 참으로 불합리합니다. 객체 지향 언어의 "인터페이스"는 인터페이스 키워드와 함께 C#에 정의 된 인터페이스와 같은 특정 코드 구조를 나타냅니다. "인터페이스 지향 프로그래밍"의 "인터페이스"는 소프트웨어 아키텍처의 관점과보다 추상적 인 수준에서보다 추상적 인 수준을 지칭하는 구조적 구성 요소라고 할 수 있습니다. 이런 의미에서, 추상 클래스가 정의되고 목적이 다형성을 달성하는 것이라면,이 추상 클래스를 "인터페이스"라고 부르는 것이 합리적이라고 생각합니다. 그러나 다형성을 구현하기 위해 추상 클래스를 사용하는 것이 합리적입니까? 아래 두 번째 기사에서 토론하십시오.
요약하면, 나는 두 개의 "인터페이스"의 개념이 서로 다르고 서로 관련되어 있다고 생각합니다. "인터페이스 지향 프로그래밍"의 인터페이스는 다형성을 실현하고 소프트웨어 유연성과 유지 관리를 향상시키기위한 이데올로기 수준의 아키텍처 구성 요소이며, 특정 언어의 "인터페이스"는이 아이디어의 구성 요소를 코드로 구현하는 수단입니다.
2. 추상 클래스 및 인터페이스에 대해
나는 이것이 답장에서 더 강렬한 문제라는 것을 보았다. 죄송합니다. 기사 에서이 문제에 대해 잘 생각하지 않았습니다. 이 문제에 대한 개인적인 이해는 다음과 같습니다.
우리가 특정 코드 만보면,이 두 개념은 흐리게되기 쉽고, 여러 상속 (c#, Java)을 제외하고는 특정 함수만으로는 인터페이스가 중복되어 있다고 생각합니다. 그러나 여러 상속을 달성하기위한 인터페이스가 존재합니까? 물론. 추상 클래스와 인터페이스의 차이는 사용 동기라고 생각합니다. 추상 클래스의 사용은 코드 재사용을위한 것이며 인터페이스를 사용하기위한 동기는 다형성입니다. 따라서 인터페이스 또는 추상 클래스를 어딘가에 사용할지 주저하고 있다면 동기가 무엇인지 생각할 수 있습니다.
Iperson 인터페이스에 대한 친구의 의심을 보면, 개인적 이해는 iPerson 인터페이스를 정의 해야하는지 여부가 특정 응용 프로그램에 달려 있다는 것입니다. 우리 프로젝트에 여성과 남성이있는 사람이 있고, 여성과 남성의 대부분이 동일하고, 한 가지 방법 만 있습니다.
그러나 우리 프로그램의 여성과 남성 수업에 기본적으로 공통 코드가없고, 인스턴스화 해야하는 개인 핸들 클래스가 있고, 그들이 남성인지 여성인지 알고 싶지 않고 인간으로 취급하고 다형성을 구현하는 경우 인터페이스로 정의해야합니다.
요컨대, 인터페이스와 추상 클래스의 차이점은 주로 그 자체가 아니라 사용 동기에 기인합니다. 사물을 추상 클래스 또는 인터페이스로 정의 해야하는 경우 특정 환경의 맥락에 따라 결정해야합니다.
또한 인터페이스와 추상 클래스의 또 다른 차이점은 추상 클래스와 하위 클래스 사이에 일반적이고 특별한 관계가 있어야하는 반면, 인터페이스는 서브 클래스가 구현 해야하는 일련의 규칙 일뿐입니다. (물론 일반적이고 특별한 관계가있을 수 있지만 인터페이스 사용의 목적은 여기에 없습니다.) 예를 들어, 자동차, 항공기 및 선박이 모두 특수 차량이기 때문에 차량을 추상 클래스, 자동차, 항공기 및 선박으로 정의하는 것이 허용됩니다. 예를 들어, Icompayable 인터페이스는이 인터페이스를 구현하는 클래스를 비교할 수 있어야한다고 말합니다. 이는 규칙입니다. 자동차 클래스가 비교할 수없는 것을 구현하는 경우, 자동차에 두 대의 자동차 인스턴스를 비교하는 방법이 있음을 의미합니다. 이는 자동차보다 더 비쌀 수 있습니다. 그것은 중요하지 않지만, 우리는 "자동차는 특별하고 비교할 수있다"고 말할 수는 없으며, 이는 문법적으로 적용되지 않습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.