Интерфейсы и абстрактные классы

Случилась со мной такая история ...

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

Давайте начнем с базовых ответов по теме интерфейс и абстрактный класс.

На вопрос: "Причем тут абстрактный класс?", отвечу так: "На собеседованиях эти вопросы идут рядом и в целом чем-то они похожи".

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

В те времена можно было наследовать много абстрактных классов и Василий не был исключением, наследовали его и всех его родственников. Но так получилось, что множественное наследование приводило к ошибкам наследования (одинаковые методы классов постоянно сорились) тогдв многие абстрактные классы иммигрировали в другие страны, а вместо них к Василию иммигрировали интерфейсы из public abstract Ифрики (нельзя наследовать много классов, но можно реализовывать много интерфейсов)

Таким образом Василий познакомился с интерфесом Амбалой. Амбала рассказал Василию, что он не содержит конструктора и реализовать его нельзя соответственно Методы интерфейса public и abstract по умолчанию

interface SomeInterface {

int SOME_THING = 11;

int foo();

}

Еще Амбала рассказал Василию, что содержит поле, но его поля только публичные, константные и статические, тогда как у Василия поля могут быть какими угодно. Но так было у предков Амбалы, тогда сам Амбала может содержать методы по умолчанию - медоты имеющие реализацию

interface SomeInterface {

default int foo() {

System.out.println("foo");

}

}

Также Амбала может иметь и статические методы, а обращаться к ним можно также как и к статическим методам класс

interface SomeInterface {

static int foo() {

System.out.println("foo");

}

}

public static void main(String[] args) {

SomeInterface.foo();

}

Шли годы и у Амбалы появились дети (jdk 9), они уже умели делать свои методы приватными и эти приватные методы могут быть как статическими так и нет.

Также к Амбале приехали родственники из Ифрики, оказалось, что они не содержат ни методов ни полей. "Как так получилось" - спросил Василий: "Что они умеют делать???".

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

interface Printable { }

class SomeClass implements Printable {

private int magicNumber = 3;

public int getMagicNumber() {

return magicNumber;

}

@override

public String toString() {

return String.valueOf(magicNumber);

}

}

public class Main {

public static void main(String[] args) {

var someClass = new SomeClass();

print(someClass);

}

public static void print(Printable printable) {

System.out.println(printable);

}

}

Суть в том, что тема интерфейсов оказалось гораздо интереснее чем я думал.

P.S помимо прочего веду телеграмм-канал и буду рад если поддержите IT-литературу.

Лига программистов

2.3K постов12K подписчик

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества