Подтвердить что ты не робот

Почему интерфейс не может реализовать другой интерфейс?

Что я имею в виду:

interface B {...}

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

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

Я googled, и я нашел this:

implements означает определение реализации для методов интерфейса. Однако интерфейсы не имеют реализации, поэтому невозможно.

Однако интерфейс представляет собой 100% абстрактный класс, а абстрактный класс может реализовывать интерфейсы (100% абстрактный класс) без реализации его методов. В чем проблема, когда она определяется как "интерфейс"?

Подробнее,

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
4b9b3361

Ответ 1

implements означает реализацию, когда interface предназначен для объявления просто для предоставления interface не для реализации.

100% abstract class функционально эквивалентен interface, но он может также иметь реализацию, если вы хотите (в этом случае он не останется 100% abstract), поэтому с точки зрения JVM они различны вещи.

Также переменная-член в 100% абстрактном классе может иметь любой квалификатор доступа, где в интерфейсе они неявно public static final.

Ответ 2

implements означает, что поведение будет определено для методов abstract (за исключением абстрактных классов), вы определяете реализацию.

extends означает, что поведение наследуется.

С интерфейсами можно сказать, что один интерфейс должен иметь то же поведение, что и другое, даже не существует реальной реализации. Поэтому для интерфейса extends имеет смысл использовать другой интерфейс вместо его реализации.


Помните, что даже если класс abstract может определять методы abstract (разумный путь к интерфейсу), он по-прежнему является классом и все еще должен быть унаследован (расширенный) и не реализован.

Ответ 3

Концептуально существуют два класса и интерфейсы домены. Внутри этих доменов вы всегда расширяетесь, только класс реализует интерфейс, который является своего рода "пересечением границы". Таким образом, в основном "extends" для интерфейсов отражает поведение для классов. По крайней мере, я думаю, что это логика. Кажется, что не все согласны с такой логикой (я нахожу, что это немного надуманно), и на самом деле нет технической причины иметь два разных ключевых слова.

Ответ 4

Однако интерфейс - это 100% абстрактный класс, а абстрактный класс может реализует интерфейс (100% абстрактный класс) без реализации его методы. В чем проблема, когда она определяется как "интерфейс"?

Это просто вопрос конвенции. Авторы java-языка решили, что "extends" - лучший способ описать это отношение, так что все мы используем.

В общем, хотя интерфейс является "100% абстрактным классом", мы не думаем о них таким образом. Обычно мы рассматриваем интерфейсы как обещание реализовать определенные ключевые методы, а не класс, из которого можно извлечь. И поэтому мы склонны использовать разные языки для интерфейсов, чем для классов.

Как утверждают другие, есть веские причины для выбора "продолжения" над "орудиями".

Ответ 5

надеюсь, что это поможет вам немного узнать, что я узнал в oops (core java) во время моего коллажа.

Реализует обозначение, определяющее реализацию для методов интерфейса. Однако интерфейсы не имеют реализации, так что это невозможно. Однако интерфейс может расширять другой интерфейс, что означает, что он может добавлять дополнительные методы и наследовать его тип.

вот пример ниже, это мое понимание и то, что я узнал в oops..!

interface ParentInterface{  
        void myMethod();  
}  

interface SubInterface extends ParentInterface{  
        void anotherMethod();  
}  

и держите одно в уме, один интерфейс может расширить только другой интерфейс, и если вы хотите определить его функцию на каком-то классе, тогда только интерфейс, реализованный, например, ниже

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
    }
}

и если абстрактный класс имеет определенную абстрактную функцию define и declare, и вы хотите определить эту функцию, или вы можете сказать, что реализуете эту функцию, то вы предполагаете расширить этот класс, потому что абстрактный класс может быть расширен. вот пример ниже.

public abstract class MyAbstractClass {

    public abstract void abstractMethod();
}

Вот пример подкласса MyAbstractClass:

public class MySubClass extends MyAbstractClass {

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

Ответ 6

Интерфейс - это класс, который содержит абстрактный метод, который не может создать какой-либо объект. Поскольку интерфейс не может создать объект и его не чистый класс, его не стоит его реализовать.