Автору. Вы взяли какой то очень невнятный пример себе. Образно говоря интерфейс это абстракция.
К примеру у вас есть некая игра. В игре есть транспорт. Вы задаетесь вопросом а какбы сделать так что бы не знать о том что именно это за транспорт но при этом уверенно использовать его.
1) Вы смотрите все свои классы: легковая машина, автобус, самолет, катер, велосипед.
2) У всех классов транспорта можно выделить общие черты. Они могут ехать вперед\назад, рулить влево\вправо, подать сигнал и т.д.
3) Описываете интерфейс с этими выделенными общими методами. Например
interface Transport{
void gazuem();
void tormozim();
void signalim();
...
}
4) Теперь настало время реализовать этот интерфейс. Пример:
public class Avtobus implements Transport{
public void gazuem() {
//реализация особенности как едет автобус
}
public void signalim() {
//тут просто школьный Фа-Фа
}
}
//Велосипед
public class Velosiped implements Transport{
public void gazuem() {
//реализация особенности как будете крутить педали
}
public void signalim() {
//тут колокольчиком Дзинь-Дзинь
}
}
//Остальные реализации
5) Абстрагируемся в коде от реализаций конкретных видов транспорта, т.е. работаем с ними как с черной коробкой. Например:
Transport velik = new Velosiped();
Transport avtobus = new Avtobus();
...
Transport samolet = new Samolet();
...
И гдето , например, все виды транспорта попали в коллапс и надо резко посигналить.
velik.signalim(); //Дзинь дзинь
avtobus.signalim(); // Фа-Фа
samolet.signalim();// А тут звуков не будет но вам до лампочки и никаких ошибок не будет
...
//Дальше, например, у игрока есть метод использовать.
//Вам не нужно знать какой именно тип транспорта перед ним, вы просто делаете следующее:
class Player{
...
public void use(Object someObject){
if(someObject instanceof Transport){
//Сюда попадет абсолютно любой тип транспорта
((Transport)someObject).sadimsya(); //Что там внутри и как оно работает вас уже не интересует
}
}
...
}
Вот в целом как то так это выглядит.