#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.");
}
}