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

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에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구