подскажите почему в этом коде в метод передается объект с типом интерфейса:
private static void print(Drink drink) {
        System.out.println(drink.getClass().getSimpleName());
    }
    public interface Drink {
        boolean isAlcoholic();
    }
То есть Drink drink - выглядит так словно это объект с типом интерфейса, но ведь у интерфейса нет объектов... это какая-то очень странная запись, я её не понимаю. То же самое касается например List<Object> list = new ArrayList<>(). Если List это интерфейс почему мы пишем его при создании объекта?