PHP 편집자 Zimo는 Java에서 추상 클래스와 인터페이스를 사용하는 타이밍을 탐색하도록 안내합니다. Java 프로그래밍에서는 추상 클래스를 사용할 시기와 인터페이스를 사용할 시기를 선택하는 것이 중요한 결정입니다. 이 기사에서는 이러한 일반적인 질문에 답하고 다양한 상황에서 적절한 추상 클래스나 인터페이스를 선택하는 방법을 더 잘 이해하는 데 도움을 줄 것입니다.
추상화와 인터페이스의 차이점은 막연하게 이해하지만, 추상화를 사용할 때와 인터페이스를 사용할 때를 도저히 이해할 수 없습니다. 인터페이스 추상화를 선택하려면 어떤 변수가 필요합니까? 그 반대의 경우도 마찬가지입니까? 온라인 답변의 대부분은 차이점을 보여주기 위한 것이지만, 나조차도 그 차이를 이해합니다. 언제가 더 적절한지 모르겠습니다.
일반적인 기존 규칙은 추상 클래스를 작성해야 할 때까지 인터페이스를 고수하는 것입니다.
Java의 인스턴스화할 수 없는 유형은 다른 유형이 준수하기 위해 interface
선택 할 수 있는 공개 인터페이스를 정의합니다.
abstract
,因此您不需要使用单词 abstract
abstract
。现在情况已不再是这样,接口现在可以具有在 implement
private
implement
방법이지만 일반적으로 이렇게 하고 싶을 것입니다. abstract 类
只是一个无法实例化的类。抽象类不需要定义任何 abstract
public
, protected
및 package-private 등 어떤 가시성으로도 메서드를 선언할 수 있습니다. public
、private
、protected
추상
으로 유지할 수 있습니다. 추상 클래스 abstract
。抽象类中的方法不是隐式 abstract
암묵적으로 추상
이 아니므로 추상으로 표시해야 합니다. extend
ing 类必须使用 super
자체 생성자에서 생성자를 호출할 수 있습니다. 추상 클래스는 모든 가시성의 인스턴스 변수를 가질 수 있으며 모든 상위 클래스의 인스턴스 변수처럼 작동합니다. extend
一个类,可以是 abstract
类,也可以是具体类。类的 abstract
ness는 허용되는 슈퍼클래스 수를 변경하지 않습니다. abstract class
es 应该是例外而不是常态。如果您需要维护某些内部状态,同时还让子类定义您自己的行为,则应该使用抽象类。一个很好的例子来自 java swing gui 库:AbstractButton
。 abstractbutton
是行为模糊地类似于窗口中按钮的事物的抽象父代,包括按钮、切换按钮和菜单中的项目。任何人都可以子类化 abstractbutton
并实现其成员来定义类似按钮的显示。但是 abstractbutton
还必须维护大量内部状态(其中大部分来自 jcomponent
) 전체 Swing API뿐만 아니라 창과도 통신합니다.
유형 모음에 대한 공개 인터페이스를 정의하려면 interface
를 사용하세요. 이러한 메소드 중 일부에 대한 기본 구현을 제공하고 2014년 이후에 릴리스된 Java 버전을 사용하려면 인터페이스를 사용하십시오. 기본 구현이 필요하지만 여전히 2000년대에 머물고 있다면 추상 클래스를 사용하세요. Java 버전에 관계없이 비공개 상태(예: 인스턴스 변수) 또는 사용자 정의 초기화(예: 생성자)가 필요한 경우 추상 클래스를 사용하세요.
인터페이스:
다음과 같은 인터페이스가 있다고 가정해 보세요:
으아악그리고 동물을 구현하는 여러 클래스:
으아악이제 인터페이스를 반환 유형으로 사용할 수 있으므로 메서드가 cat
或 dog
을 반환할 수 있습니다.
추상 수업:
추상 클래스가 있다고 가정해 보겠습니다.
으아악이제 이를 확장하는 모든 클래스는 getname
메서드를 구현해야 합니다.
위의 두 클래스 모두 필수 getname
方法,但它们也可以访问父类 makenoise
메서드를 구현하지만 부모 클래스 makenoise
메서드에 액세스할 수도 있으며 필요한 경우 재정의할 수도 있습니다.
다른 차이점도 알아두는 것이 중요합니다.
위 내용은 언제 추상화를 사용하고 언제 인터페이스를 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!