추천, 2024

에디터의 선택

Java와 C #의 인터페이스와 추상 클래스의 차이점

Interface와 Abstract 클래스는 모두 OOP에서 "불완전 유형"에 기여합니다. 때로는 "해야할 일"을 정의하기 위해 수퍼 클래스가 필요하지만 "수행하는 방법"이 아니라 "필요하다면 파생 클래스가 구현하는 방법"이 " 인터페이스 "에서 이에 대한 해결책을 제공합니다. 때로는 파생 클래스에서 구현할 수있는 일반화 된 구조와 파생 클래스에서 사용할 수있는 특정 구조를 정의하는 수퍼 클래스가 필요합니다. " 추상 클래스 "는 이에 대한 솔루션을 제공합니다. 인터페이스와 추상 클래스의 근본적인 차이점은 인터페이스가 완전히 불완전하고 추상 클래스가 부분적으로 불완전하다는 것입니다.

비교 차트

비교의 근거인터페이스추상 클래스
기본구현에 대한 지식이 없으면 "인터페이스"를 사용합니다.구현에 대해 부분적으로 알고있을 때는 "추상 클래스"를 사용합니다.
행동 양식인터페이스는 추상 메소드 만 포함합니다.추상 클래스는 추상 메소드와 구체적인 메소드를 포함합니다.
메소드의 접근 수정 자인터페이스 메서드는 선언하지 않더라도 항상 "Public"및 "Abstract"입니다. 따라서 100 % 순수 추상 클래스라고 할 수 있습니다.추상적 인 수업에서의 방법이 공개되고 추상적 인 것은 강제는 아니다. 그것은 또한 구체적인 방법을 가질 수 있습니다.
제한된 메소드 수정 자인터페이스 메소드는 다음 수정 자로 선언 할 수 없습니다.
공개 : 비공개 및 보호
요약 : final, static, synchronized, native, strictfp.
추상 클래스 변수의 수식어에는 제한이 없습니다.
변수 수정 자인터페이스 변수에 허용되는 Acess 수정자는 선언 여부에 관계없이 public, static 및 final입니다.abstract 클래스의 변수는 public, static, final 일 필요는 없습니다.
변수에 대해 제한된 수식어인터페이스 변수는 private, protected, transient, volatile로 선언 할 수 없습니다.추상 클래스 변수의 수식어에는 제한이 없습니다.
변수의 초기화인터페이스 변수는 선언시에 초기화되어야합니다.추상 클래스 변수는 반드시 선언시에 초기화되어야한다는 것은 아닙니다.
인스턴스 및 정적 블록내부 인터페이스에서는 인스턴스 또는 정적 블록을 선언 할 수 없습니다.추상 클래스는 그 안에 인스턴스 또는 정적 블록을 허용합니다.
생성자인터페이스 내부에 생성자를 선언 할 수 없습니다.추상 클래스 내에서 생성자를 선언 할 수 있습니다.

인터페이스의 정의

Java는 다중 상속을 허용하지 않습니다. 즉, 한 클래스는 한 번에 둘 이상의 클래스를 상속받을 수 없습니다. 이 문제의 원인은 예를 들어 설명 할 수 있습니다. 부모 클래스 A와 B와 파생 클래스 C가 있다고 가정합시다. 파생 클래스 C는 클래스 A와 B를 상속합니다. 이제는 클래스 A와 B 모두에 set ()이 있습니다. 그런 다음 질문이됩니다. 클래스 C가 클래스의 set () 메소드가 상속해야하는 클래스. 이 문제에 대한 해결책은 "인터페이스"입니다.

인터페이스는 순수한 추상 클래스입니다. 인터페이스를 만드는 데 사용되는 키워드는 "인터페이스"입니다. 인터페이스 내부의 모든 메소드가 완전 추상이기 때문에. 인터페이스는 클래스가 수행해야하는 작업 만 지정하지만, 클래스가 수행하는 방법은 정의하지 않습니다. 인터페이스 내부에서 선언 된 모든 메소드가 추상적이기 때문에 인터페이스에 대한 인스턴스가 작성되지 않습니다. java의 "인터페이스"의 일반적인 형식은 다음과 같습니다.

 access_specifier 인터페이스 인터페이스 이름 {return-type method-name1 (parameter-list); return-type method-name2 (매개 변수 목록); 타입 final-varname1 = value; type final-varname2 = value; // ... return-type method-nameN (매개 변수 목록); 다음과 같이 입력하십시오. final-varnameN = value; } 

클래스가 인터페이스를 구현해야하기 때문에 액세스 지정자는 public으로 선언됩니다.

우리는 C ++에서 "인터페이스"라는 개념을 가지고 있지 않습니다. 하지만 Java와 C #은 인터페이스를 잘 정의합니다.

자바 인터페이스 :

  • 인터페이스의 변수는 기본적으로 항상 public, static 및 final입니다.
  • 변수는 선언시에 초기화되어야합니다.
  • 변수는 private, protected, transient 및 volatile로 선언 될 수 없습니다.
  • 인터페이스의 메소드는 항상 public 및 abstract 인 반면 private, protected, final, static, synchronized, native 및 strictfp로 선언 할 수는 없습니다.
  • 생성자의 주된 목적은 클래스 변수의 초기화이지만 인터페이스 변수에서는 선언시 초기화됩니다. 인터페이스 내부에 생성자를 선언 할 수 없습니다.
  • 인터페이스는 다른 인터페이스를 상속 할 수 있지만 그러한 인터페이스를 구현하는 클래스는 상속 된 모든 인터페이스의 메소드를 구현해야합니다.
  • 클래스는 한 번에 둘 이상의 인터페이스를 상속 할 수 있으며 모든 상속 된 인터페이스의 모든 메소드를 구현해야합니다.

Java에서 인터페이스를 구현하는 일반적인 형식은 다음과 같습니다.

 class_name 클래스는 Interface_name {// class-body}을 구현합니다. 

인터페이스를 상속하기 위해 클래스는 "implements"라는 키워드를 사용하고 클래스는 상속 된 인터페이스로 선언 된 모든 메서드를 구현합니다.

C #의 인터페이스 :

C #의 인터페이스는 Java의 인터페이스와 거의 비슷합니다.

  • C #의 인터페이스는 변수를 선언하지 않습니다.
  • 인터페이스의 이름 앞에는 대문자 I가 붙으며 콜론 (:)으로 상속됩니다.

C #에서 인터페이스를 구현하는 일반적인 형식은 다음과 같습니다.

 class class_name : interface_name {// class-body} 

추상 클래스의 정의

하나 이상의 추상 메소드가 포함 된 클래스를 추상 클래스라고하며 클래스는 클래스 선언의 시작 부분에 "class"키워드가 앞에 오는 키워드 "abstract"를 사용하여 추상으로 선언됩니다. 추상 클래스는 추상 메소드를 포함하기 때문에 불완전한 타입을 구성합니다. 따라서 추상 클래스의 객체를 만들 수는 없습니다. 클래스가 추상 클래스를 상속 할 때마다 추상 클래스의 모든 추상 메소드를 구현해야합니다. 추상 클래스가 추상화되어 있지 않으면 추상 메소드로 선언해야합니다. 추상 메소드의 완전한 구현이 이루어질 때까지 추상 속성이 상속됩니다.

추상 클래스에는 파생 클래스에서 그대로 사용할 수있는 구체적인 메서드가 포함될 수도 있습니다. 그러나 추상 클래스 내에서는 추상 생성자 또는 추상 정적 메서드를 선언 할 수 없습니다. Java에서 abstract 클래스의 일반적인 형식은 다음과 같습니다.

 abstract class class_name {추상 method_name1 (); 추상 method_name2 (); : return_type method_name3 (parameter_list) {// 구체적인 메소드} return_type method_name4 (parameter_list) {// 구체적인 메소드}}; 

추상 클래스의 개념은 Java와 C #에서 비슷합니다. 추상 클래스는 C ++에서 약간 다릅니다.

C ++에서 클래스가 적어도 하나의 가상 함수를 갖고 있다면 클래스는 추상 클래스가됩니다. 키워드 "abstract"대신 키워드 "virtual"을 사용하여 추상 메소드를 선언합니다.

Java 및 C #의 인터페이스와 추상 클래스의 주요 차이점

  1. "필요한 것"에 대한 지식이 있지만 "구현 방법"이 아니라면 인터페이스를 사용해야합니다. 반면에, 무엇이 필요한지 알고 부분적으로 어떻게 구현되는지 알고 있다면 추상 클래스를 사용하십시오.
  2. 인터페이스에는 모든 abstract 메소드가 있지만 추상 클래스에는 몇 가지 추상 메소드와 몇 가지 구체적인 메소드가 있습니다.
  3. 인터페이스 내부의 메소드는 public 및 abstract이므로 순수 추상 클래스라고도합니다. 반면에 추상 내의 메서드는 public 및 abstract로만 제한되지 않습니다.
  4. 인터페이스 메소드는 private, protected, final, static, synchronized, native 또는 strictfp 일 수 없습니다. 한편, 추상 클래스의 메소드에는 제한이 없습니다.
  5. 인터페이스의 변수는 선언 여부에 관계없이 public 및 final이지만 추상 클래스의 변수에는 public 및 final 만 허용됩니다.
  6. 인터페이스의 변수는 결코 비공개 적으로 보호되거나 transient 또는 volatile 일 수는 있지만 추상 클래스의 변수에는 제한이 없습니다.
  7. 인터페이스 변수는 선언하는 동안 초기화되어야합니다. 반면에 추상 클래스의 변수는 언제든지 초기화 될 수 있습니다.
  8. 인터페이스 내부에서 인스턴스 또는 정적 블록을 선언 할 수 없지만 추상 클래스 내에서 인스턴스 또는 정적 블록을 선언 할 수 있습니다.
  9. 인터페이스 내부에서는 생성자를 정의 할 수 없지만 추상 클래스에서는 생성자를 정의 할 수 있습니다.

결론:

파생 된 클래스가 자신의 필요에 따라 구현할 수있는 일반화 된 형식의 메서드를 포함하는 기본 클래스를 만들어야하는 경우 인터페이스 및 추상 클래스의 개념이 그렇게하는 데 도움이됩니다.

Top