Реализация интерфейса как родительским, так и подклассом в java

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


person Prashant    schedule 20.01.2018    source источник
comment
почему бы тебе не попробовать это самому   -  person pratikabu    schedule 20.01.2018


Ответы (4)


Да, вы можете, и реализация из подкласса выполняется, когда у вас есть парадигма инициализации.

BaseClass v = new SubClass();

Это вполне нормальный полиморфизм/овверидинг.

Связано: Может ли интерфейс расширять несколько интерфейсов в Java?

person Suresh Atta    schedule 20.01.2018
comment
Что, если переопределенный метод в родительском классе является закрытым? - person Prashant; 20.01.2018
comment
Если вы попытаетесь сделать приватным, вы увидите ошибку компилятора, потому что вы уменьшаете видимость метода. - person Suresh Atta; 20.01.2018

мы должны также обеспечить реализацию в подклассе

Нет, вы не обязаны этого делать. Если один класс extends другой, у него уже есть все (public и protected) методы, объявленные в родительском классе.

Но вы можете предоставить другую реализацию этого метода. В этом случае метод из родительского класса будет переопределен.

person Kirill Simonov    schedule 20.01.2018

Нет необходимости реализовывать один и тот же интерфейс как в родительском, так и в дочернем классе, потому что, если вы реализуете его в родительском классе, у дочернего также будет тот же метод, но если вы хотите переопределить, вы можете его переопределить.

public interface Shape {
    void draw();
}

class Parallelogram implements Shape {
    public void draw() {
        System.out.println("This is Parallelogram");
    }
}

public class Square extends Parallelogram {
    @Override
    public void draw() {
        System.out.println("This Parallelogram is Square");
    }

    public static void main(String args[0]) {

        Square square = new Square();
        square.draw();
    }

}

//Выведите этот параллелограмм квадратным

public class Rhombus extends Parallelogram {

    public static void main(String args[0]) {

        Rhombus rhombus = new Rhombus();
        rhombus.draw();
    }
}

//Вывод: это параллелограмм

person Abhishek Gharai    schedule 20.01.2018

Это не требуется, так как подкласс уже имеет реализацию метода в базовом классе.

person codeLover    schedule 20.01.2018
comment
Что, если подкласс имеет другую реализацию для одного и того же? - person Suresh Atta; 20.01.2018
comment
Затем вы можете переопределить этот метод и в дочернем классе. - person codeLover; 20.01.2018