Дочерний интерфейс с тем же методом, что и родительский - PullRequest
2 голосов
/ 25 января 2020

Если интерфейс B расширяет интерфейс A и предоставляет тот же метод, что и интерфейс A, означает ли это, что метод переписывает другой метод?

Редактировать : изменилось слово Implements * От 1006 * до расширить , поскольку это неправильно и на самом деле не означало писать хе-хе для реализации ...

Целью этого примера кода, который я нашел на своем экзамене, было узнать, как расширение работы интерфейсов и то, что здесь было задано, заключалось в предоставлении тела ConcreteClass, в частности, какие методы должен реализовывать класс: решение находится в теле класса, но я не понимаю, что происходит с методом Y (String z) в Interface_Y перезаписывается ли метод methodX (String x) в Interface_Z, не должен ли methodY (String z) также присутствовать в списке методов, которые должен реализовывать ConcreteClass, или имя метода не имеет значения, когда оно доходит до возможности перезаписи?

interface Interface_X{
    public int methodX(int x);
}

interface Interface_Y extends Interface_X{
    public void methodY(String z);
    public int methodX(int y);
}

interface Interface_Z extends Interface_X{
    public void methodX(String x);
    public int methodX(int y);
}

abstract class AbstractClass implements Interface_Z, Runnable{
    public abstract int methodX();
    public int methodX(int c) {
        return 0;    
    } 
}

public class ConcreteClass extends AbstractClass{

    @Override
    public void run(){

    }

    @Override
    public int methodX(){
        return 0;
    }

    @Override
    public void methodX(String z){

    }
}

Ответы [ 2 ]

4 голосов
/ 25 января 2020

но я не понимаю, что происходит с методом Y (строка z)

С ним ничего не происходит, потому что Interface_Y, к которому принадлежит этот метод, не находится в иерархии типов ConcreteClass.

        Interface_X 
       /           \             Runnable
Interface_Y   Interface_Z           /
                     \             /
                AbstractClass     /
                       \         /
                      ConcreteClass
1 голос
/ 25 января 2020

Интерфейсы - это просто контракты или скелеты. Пожалуйста, посмотрите это. https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

Прежде всего: интерфейс никогда не реализует интерфейс. Это всегда расширяет это.

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

Ответ на ваш вопрос? Что происходит с методом Y Interface_Y?

Любой неабстрактный класс, реализующий этот интерфейс, должен предоставить реализацию.

...