> Java > 언제 추상화를 사용하고 언제 인터페이스를 사용합니까?

언제 추상화를 사용하고 언제 인터페이스를 사용합니까?

PHPz
풀어 주다: 2024-02-22 12:25:19
앞으로
751명이 탐색했습니다.

PHP 편집자 Zimo는 Java에서 추상 클래스와 인터페이스를 사용하는 타이밍을 탐색하도록 안내합니다. Java 프로그래밍에서는 추상 클래스를 사용할 시기와 인터페이스를 사용할 시기를 선택하는 것이 중요한 결정입니다. 이 기사에서는 이러한 일반적인 질문에 답하고 다양한 상황에서 적절한 추상 클래스나 인터페이스를 선택하는 방법을 더 잘 이해하는 데 도움을 줄 것입니다.

질문 내용

추상화와 인터페이스의 차이점은 막연하게 이해하지만, 추상화를 사용할 때와 인터페이스를 사용할 때를 도저히 이해할 수 없습니다. 인터페이스 추상화를 선택하려면 어떤 변수가 필요합니까? 그 반대의 경우도 마찬가지입니까? 온라인 답변의 대부분은 차이점을 보여주기 위한 것이지만, 나조차도 그 차이를 이해합니다. 언제가 더 적절한지 모르겠습니다.

해결책

일반적인 기존 규칙은 추상 클래스를 작성해야 할 때까지 인터페이스를 고수하는 것입니다.

Java의 인스턴스화할 수 없는 유형은 다른 유형이 준수하기 위해 interface 선택 할 수 있는 공개 인터페이스를 정의합니다.

    인터페이스는 구현자가 정의해야 하는 공용 메서드를 선언할 수 있습니다. 이러한 모든 방법은 암시적으로
  • 입니다. abstract,因此您不需要使用单词 abstract
  • 이전 버전의 Java에서는 인터페이스가 기본 구현을 가질 수 없었기 때문에 모든 메소드는 교체되지 않는 한 클래스에서 사용되는 기본 구현을
  • ing했습니다. abstract。现在情况已不再是这样,接口现在可以具有在 implement
  • 최신 버전의 Java에서는 인터페이스가
  • 도우미 메서드를 선언할 수 있습니다. 이는 기본 구현에 도움이 될 수 있습니다. private
  • 인터페이스는 생성자나 인스턴스 변수를 가질 수 없습니다.
  • 클래스는
  • 여러 인터페이스를 가질 수 있습니다. implement

방법이지만 일반적으로 이렇게 하고 싶을 것입니다. abstract 类 只是一个无法实例化的类。抽象类不需要定义任何 abstract

    추상 클래스는 public,
  • , protected 및 package-private 등 어떤 가시성으로도 메서드를 선언할 수 있습니다. publicprivateprotected
  • 추상 클래스는 메서드를 구현하거나 추상으로 유지할 수 있습니다. 추상 클래스
  • 의 메서드는 abstract。抽象类中的方法不是隐式 abstract암묵적으로 추상이 아니므로 추상으로 표시해야 합니다.
  • 추상 클래스는 생성자를 가질 수 있으며, extending 类必须使用 super자체 생성자에서 생성자를 호출할 수 있습니다. 추상 클래스는 모든 가시성의 인스턴스 변수를 가질 수 있으며 모든 상위 클래스의 인스턴스 변수처럼 작동합니다.
  • A 클래스의 유일한 extend 一个类,可以是 abstract 类,也可以是具体类。类的 abstractness는 허용되는 슈퍼클래스 수를 변경하지 않습니다.

abstract classes 应该是例外而不是常态。如果您需要维护某些内部状态,同时还让子类定义您自己的行为,则应该使用抽象类。一个很好的例子来自 java swing gui 库:AbstractButtonabstractbutton 是行为模糊地类似于窗口中按钮的事物的抽象父代,包括按钮、切换按钮和菜单中的项目。任何人都可以子类化 abstractbutton 并实现其成员来定义类似按钮的显示。但是 abstractbutton 还必须维护大量内部状态(其中大部分来自 jcomponent) 전체 Swing API뿐만 아니라 창과도 통신합니다.

유형 모음에 대한 공개 인터페이스를 정의하려면 interface를 사용하세요. 이러한 메소드 중 일부에 대한 기본 구현을 제공하고 2014년 이후에 릴리스된 Java 버전을 사용하려면 인터페이스를 사용하십시오. 기본 구현이 필요하지만 여전히 2000년대에 머물고 있다면 추상 클래스를 사용하세요. Java 버전에 관계없이 비공개 상태(예: 인스턴스 변수) 또는 사용자 정의 초기화(예: 생성자)가 필요한 경우 추상 클래스를 사용하세요.

인터페이스:

다음과 같은 인터페이스가 있다고 가정해 보세요:

으아악

그리고 동물을 구현하는 여러 클래스:

으아악

이제 인터페이스를 반환 유형으로 사용할 수 있으므로 메서드가 catdog을 반환할 수 있습니다.

으아악

추상 수업:

추상 클래스가 있다고 가정해 보겠습니다.

으아악

이제 이를 확장하는 모든 클래스는 getname 메서드를 구현해야 합니다.

으아악

위의 두 클래스 모두 필수 getname 方法,但它们也可以访问父类 makenoise 메서드를 구현하지만 부모 클래스 makenoise 메서드에 액세스할 수도 있으며 필요한 경우 재정의할 수도 있습니다.

다른 차이점도 알아두는 것이 중요합니다.

  • 추상 클래스는 하나만 확장할 수 있지만 여러 개를 구현할 수도 있습니다. 상호 작용.
  • 인터페이스는 서로 다른 유형이 동일한 메소드 시그니처를 가져야 할 때 사용해야 하고, 구현이 공통 동작을 공유할 때 추상 클래스를 사용해야 합니다.
  • 상호 배타적이지 않습니다.
  • 인터페이스는 공개 메소드만 가질 수 있는 반면 추상 클래스는 공개 메소드와 보호 메소드를 가질 수 있습니다.

위 내용은 언제 추상화를 사용하고 언제 인터페이스를 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿