programing

인터페이스가 다른 인터페이스를 구현할 수 없는 이유는 무엇입니까?

goodjava 2022. 12. 10. 10:48

인터페이스가 다른 인터페이스를 구현할 수 없는 이유는 무엇입니까?

내 말은:

interface B {...}

interface A extends B {...} // allowed  

interface A implements B {...} // not allowed

검색해봤더니 이게 나왔어요.

implements 는, 인터페이스 방식의 실장을 정의하는 것을 나타내고 있습니다.다만, 인터페이스에는 실장이 없기 때문에, 이것은 불가능합니다.

단, 인터페이스는 100% 추상 클래스이며 추상 클래스는 메서드를 구현하지 않고도 인터페이스(100% 추상 클래스)를 구현할 수 있습니다.「interface」라고 정의되어 있는 경우는, 무엇이 문제입니까.

자세한 것은,

interface A {
    void methodA();
}

abstract class B implements A {} // we may not implement methodA() but allowed

class C extends B {
   void methodA(){}
} 

interface B implements A {} // not allowed. 
//however, interface B = %100 abstract class B

implements실장을 의미합니다.interface단지 그 정보를 제공한다는 것을 선언하는 것이다.interface구현용이 아닙니다.

A 100%abstract class기능적으로 동등합니다.interface또, 필요에 따라서 실장할 수도 있습니다(이 경우는, 100%로 유지되지 않습니다).abstractJVM의 관점에서 보면, 그것들은 다른 것입니다.

또한 100% 추상 클래스의 멤버 변수에는 임의의 액세스 수식자를 지정할 수 있습니다.인터페이스에서는 암묵적으로public static final.

implements동작을 정의하는 것을 의미합니다.abstract메서드(명백한 추상 클래스 제외)는 구현을 정의합니다.

extends동작이 상속되는 것을 의미합니다.

인터페이스에서는, 어느 인터페이스가 다른 인터페이스와 같은 동작을 취할 필요가 있다고 말할 수 있습니다만, 실제의 실장은 없습니다.그렇기 때문에 인터페이스에서는,extends다른 인터페이스를 실장하는 것이 아니라, 다른 인터페이스를 실장합니다.


한 가지 덧붙이자면, 기억하라.abstract클래스는 정의할 수 있습니다.abstractmethods(인터페이스의 정상적인 방법)는, 아직 클래스이며, 계승(복제)되어 실장되어 있지 않습니다.

개념적으로는 2개의 "도메인" 클래스와 인터페이스가 있습니다.이러한 도메인 내에서 항상 확장되는 것은 클래스뿐이며, 일종의 "경계 통과"인 인터페이스를 구현합니다.따라서 기본적으로 인터페이스의 "확장"은 클래스의 동작을 반영합니다.적어도 나는 이것이 이면에 있는 논리라고 생각한다.모든 사람이 이러한 논리에 동의하는 것은 아닌 것 같습니다(나 자신도 약간 조작했다고 생각합니다). 사실 두 개의 다른 키워드를 가질 기술적 이유는 전혀 없습니다.

그러나 인터페이스는 100% 추상 클래스이며 추상 클래스는 메서드를 구현하지 않고도 인터페이스(100% 추상 클래스)를 구현할 수 있습니다.「interface」라고 정의되어 있는 경우는, 무엇이 문제입니까.

이것은 단지 관습의 문제이다.자바 언어를 쓰는 사람들은 "확장"이 이 관계를 설명하는 가장 좋은 방법이라고 판단했습니다. 그래서 우리는 모두 그렇게 생각합니다.

일반적으로 인터페이스가 "100% 추상 클래스"라고 해도 우리는 그렇게 생각하지 않습니다.일반적으로 인터페이스는 파생되는 클래스가 아니라 특정 키메서드를 구현하기 위한 약속으로 간주됩니다.따라서 인터페이스에는 클래스와는 다른 언어를 사용하는 경향이 있습니다.

다른 사람들이 말하듯이, "실장"보다 "확장"을 선택하는 데는 충분한 이유가 있습니다.

이것이 제가 대학에서 배운 웁스(핵심 자바)에 도움이 되기를 바랍니다.

구현이란 인터페이스의 메서드에 대한 구현을 정의하는 것을 의미합니다.다만, 인터페이스에는 실장이 없기 때문에, 이것은 불가능합니다.단, 인터페이스는 다른 인터페이스를 확장할 수 있습니다.즉, 다른 메서드를 추가하여 그 유형을 상속할 수 있습니다.

아래에 예를 제시하겠습니다.이것이 저의 이해와 제가 웁스로 배운 것입니다.

interface ParentInterface{  
        void myMethod();  
}  

interface SubInterface extends ParentInterface{  
        void anotherMethod();  
}  

1개의 인터페이스가 다른 인터페이스만 확장할 수 있다는 점에 유의하십시오.또, 그 기능을 특정의 클래스에서 정의하려면 , 다음과 같이 실장되어 있는 인터페이스만이 필요합니다.

public interface Dog
{
    public boolean Barks();

    public boolean isGoldenRetriever();
}

클래스가 이 인터페이스를 실장했을 경우는, 다음과 같이 됩니다.

public class SomeClass implements Dog
{
    public boolean Barks{
    // method definition here

    }

    public boolean isGoldenRetriever{
    // method definition here
    }
}

추상 클래스에 추상 함수의 정의와 선언이 있고, 그 함수를 정의하거나 그 함수를 구현한다고 말할 수 있다면 추상 클래스는 확장만 가능하기 때문에 그 클래스를 확장해야 합니다.다음은 예를 제시하겠습니다.

public abstract class MyAbstractClass {

    public abstract void abstractMethod();
}

MyAbstractClass 서브클래스의 예를 다음에 나타냅니다.

public class MySubClass extends MyAbstractClass {

    public void abstractMethod() {
        System.out.println("My method implementation");
    }
}

인터페이스는 기능을 제공하지 않는 추상화와 같습니다.따라서 이는 '실현'하는 것이 아니라 다른 추상화 또는 인터페이스를 확장한다.

인터페이스는 개체를 만들 수 없는 추상 메서드를 포함하는 클래스입니다.인터페이스는 객체를 만들 수 없고 클래스가 순수하지 않기 때문에 구현할 가치가 없습니다.

언급URL : https://stackoverflow.com/questions/3921412/why-an-interface-can-not-implement-another-interface