(ООП) Реализация предварительно запрограммированной функции в классе

#class #object #oop #interface #interface-implementation

Вопрос:

Экспериментальный/теоретический вопрос, касающийся любого языка OOP (Java, C#, машинопись и т. Д.)

Обычно при реализации интерфейса в классе необходимо переопределить все функции этого интерфейса в классе, написав код для каждой функции из этого интерфейса. И каждый класс, реализующий этот интерфейс, должен иметь свой собственный код для этих функций. Предположим, у нас есть вызываемый интерфейс Test , в котором вызывается функция foo() , в которой мне нужен следующий код System.out.println("This is an interface function"); .
Обычно нужно создать интерфейс и объявить функцию, а затем написать код в каждом реализующем классе, но что, если существует какой-то «теоретический» способ записать все функции в интерфейс, и каждый реализующий класс может просто вызвать его без необходимости переопределения. Что-то вроде следующего (использование Java в качестве базового языка):

 interface Test {
    public foo() {
        System.out.println("Test log.")
    }
}

class Class1 implements Test {
    constructor() {}

}
class Class2 implements Test {
    constructor() {}

}

class Main {
    public static void main() {
        Class1 f1 = new Class1();
        Class2 f2 = new Class2();
        f1.foo();
        f2.foo();
    }
}
 

Ответ №1:

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

 interface Test {
    default void foo() {
        System.out.println("Test log.");
    }
}