source

자바 추상 인터페이스

gigabyte 2022. 9. 13. 22:06
반응형

자바 추상 인터페이스

예를 들어 (자바로 컴파일)

public abstract interface Interface {
    public void interfacing();
    public abstract boolean interfacing(boolean really);
}

인터페이스를 추상화라고 선언할 필요가 있는 이유는 무엇입니까?추상 인터페이스에 적용되는 다른 규칙이 있습니까?


★★★★★★★★★★★★★★★★★★★★★★★★★.abstract식인데 ?함 ??? ??? ???추상 인터페이스에 대한 이력이 있습니까?

인터페이스를 추상화라고 선언할 필요가 있는 이유는 무엇입니까?

그런거 아냐.

public abstract interface Interface {
       \___.__/
           |
           '----> Neither this...

    public void interfacing();
    public abstract boolean interfacing(boolean really);
           \___.__/
               |
               '----> nor this, are necessary.
}

와 그 으로 「」입니다.abstract그리고 그 수식어를 더해도 아무런 차이가 없습니다.

추상 인터페이스에 적용되는 다른 규칙이 있습니까?

아니요, 같은 규칙이 적용됩니다.이 방법은 모든 (구체적인) 구현 클래스에서 구현해야 합니다.

추상화가 쓸모없다면 왜 자바에 포함됩니까?추상 인터페이스에 대한 이력이 있습니까?

흥미로운 질문입니다.JLS의 초판을 파헤쳐 보니, 「이 수식어는 구식이므로, 새로운 Java 프로그램에서는 사용할 없습니다」라고 써 있습니다.

좋아, 더 파고들면...수많은 링크 파단을 겪은 후, 오리지널 Oak 0.2 사양(또는 "수동")의 복사본을 찾을 수 있었습니다.꽤 재미있는 읽을거리인데, 총 38페이지밖에 안됬어! :-)

섹션 5의 [Interfaces]아래에 다음 예를 나타냅니다.

public interface Storing {
    void freezeDry(Stream s) = 0;
    void reconstitute(Stream s) = 0;
}

그리고 여백에 이렇게 적혀 있어요.

미래에는 인터페이스에서 메서드를 선언하는 "=0" 부분이 사라질 수 있습니다.

=0 got로 abstract스럽다.abstract이치노


관련 기사: Java: 추상 인터페이스추상 인터페이스 메서드

것은 션입니니다다public인터페이스 방식입니다.

다음의 JLS 를 참조해 주세요.

http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

9.1.1.1 추상 인터페이스 모든 인터페이스는 암묵적으로 추상적입니다.이 수식어는 더 이상 사용되지 않으므로 새 프로그램에서는 사용하지 마십시오.

그리고.

9.4 추상적 방법 선언

[...]

이전 버전의 Java 플랫폼과의 호환성을 위해 인터페이스로 선언된 메서드의 추상 수식자를 중복하여 지정하는 것은 허용되지만 스타일상 권장되지 않습니다.

인터페이스 메서드의 퍼블릭 수식자를 용장하게 지정하는 것은 허용되지만 스타일에 따라서는 강하게 권장되지 않습니다.

인터페이스의 추상화를 선언할 필요는 없습니다.

이러한 모든 메서드가 public(인터페이스가 public인 경우 이미 public) 또는 abstract(인터페이스에 이미 있는 경우)로 선언하는 것과 마찬가지로 용장성이 있습니다.

하지만 아무도 말리지 않아요.

그 외, 명시적으로 기술할 수 있지만, 반드시 기술할 필요는 없습니다.

  • 컨스트럭터의 첫 번째 줄에 있는 super()를 호출합니다.
  • extends Object
  • 상속된 인터페이스를 실장하다

추상 인터페이스에 적용되는 다른 규칙이 있습니까?

인터페이스가 이미 "추상" 상태입니다.이 키워드를 다시 적용해도 전혀 차이가 없습니다.

봄에는 그것이 학문적인 의미가 없다는 것을 알아두세요.이하지 말 입니다.@Autowired봄/이클립스가@Autowired속죄하다

예: @ @ a 방식을 사용해야 하지만 @Transnational to @Repository @Service proxy로 이.@Autowired (을 XXX 인터페이스라고 .)

모든 인터페이스는 암묵적으로 추상적입니다.
이 수식어는 더 이상 사용되지 않으므로 새 프로그램에서는 사용하지 마십시오.

Language . 1 . 1 ]abstract »★★★★★★★★★★★★★★★★★★」

, 인터페이스 으로 「」라고 하는 점에 해 주세요.public abstract.
Language .2 Members][ Java Language Specification - 9.2 Interface Members ]

왜 그런 수식어가 암묵적인 거죠?여기에 도움이 되는 다른 수식자('수식자 없음' 수식자도 아님)는 없으므로 명시적으로 입력할 필요가 없습니다.

그럴 필요 없어요.그것은 언어의 기행이다.

인터페이스의 모든 메서드가 추상적이기 때문에 인터페이스는 기본적으로 추상적이기 때문에 필요하지 않습니다.

추상적인 인터페이스는 적어도 이론적으로는 모두가 말하는 것처럼 장황하지 않습니다.

클래스와 마찬가지로 인터페이스를 확장할 수 있습니다.애플리케이션의 인터페이스 계층을 설계하면, 「베이스」인터페이스를 가지는 것이 좋습니다.다른 인터페이스는 에서 확장되지만, 그 자체는 오브젝트로서 사용할 수 없습니다.

예:

public abstract interface MyBaseInterface {
    public String getName();
}

public interface MyBoat extends MyBaseInterface {
    public String getMastSize();
}

public interface MyDog extends MyBaseInterface {
    public long tinsOfFoodPerDay();
}

클래스에서 MyBase를 구현하지 않는 경우인터페이스, 나머지 두 개(MMyDog 및 MyBoat)만 사용하지만 두 인터페이스는 MyBase를 공유합니다.인터페이스이므로, 「name」속성이 필요합니다.

좀 학술적이긴 하지만, 재미있어 하는 사람도 있을 것 같아서요. :-)

이 경우, 이것은 실제로 '마커'일 뿐이며, 그 자체로 구현되도록 설계되지 않은 인터페이스의 구현자에게 신호를 보냅니다.컴파일러(적어도 사용해 본 Sun/ora 1.6)는 추상 인터페이스를 구현하는 클래스를 컴파일합니다.

'추상 인터페이스'는 http://en.wikipedia.org/wiki/Lexical_analysis의 사전 구조입니다.

이것은 컴파일러에 필요합니다.또, 기입할 수도 있습니다.interface.

언어의 Lexical 구조에 너무 많이 관여하지 마십시오.컴파일 프로세스 중 특수한 경우 또는 하위 호환성을 위해 컴파일된 애매함을 해소하기 위해 Lexical 언어를 배치했을 수 있으므로 핵심 Lexical 구조에 초점을 맞추십시오.

'인터페이스'의 본질은 구현이 다를 수 있는 추상적 개념(아이디어/생각/고차적 사고 등)을 포착하는 것이다. 즉, 여러 개의 구현이 있을 수 있다.

인터페이스는 캡처하거나 나타내는 객체의 기능을 나타내는 순수 추상 데이터 유형입니다.

특징은 공간 또는 시간으로 나타낼 수 있습니다.공간(메모리 스토리지)으로 표시되는 경우는, 구체적인 클래스가 그 필드 또는 시간에 의해서 동작하는 필드 및 메서드/메서드를 실장하는 것을 의미합니다.즉, 기능의 실장 태스크는 순전히 계산(처리에 더 많은 CPU 클럭이 필요)하기 때문에, 기능의 공간과 시간의 균형을 맞출 수 있습니다.실행.

만약 당신의 구체적인 클래스가 모든 특징을 구현하지 않는다면, 당신의 생각이나 아이디어 또는 추상성의 실행이 있지만 완전하지 않기 때문에 그것은 다시 추상화 됩니다, 당신은 그것을 다음과 같이 지정합니다.abstract학급.

구체적인 클래스는 클래스 XYZ를 캡처하려는 추상성을 완전히 캡처하는 클래스/세트입니다.

그래서 패턴은

Interface--->Abstract class/Abstract classes(depends)-->Concrete class

언급URL : https://stackoverflow.com/questions/7202616/java-abstract-interface

반응형