Классы и интерфейсы как параметры методов

Классы и интерфейсы могут использоваться в качестве типа параметров метода или в качестве возвращаемого типа, но я не могу понять данную тему. Пожалуйста можете помочь? Или дать нужную ссылку с легким объяснением?


я хочу узнать как классы и интерфейсы могут использоваться в качестве типа параметров метода или в качестве возвращаемого типа


Ответы (2 шт):

Автор решения: ЮрийСПб

Наверное, можно просто показать на примере:

public interface Vehicle {
    public int getSpeed();
    public void start();
}

public class Main {

    public static int main(String[] args) {
        Main main = new Main()
        Vehicle vehicle = main.generate();
        main.start(vehicle);
    }

    public Vehicle generate() {
        return new Vehicle() {
            @Override
            public int getSpeed() {
                return new Random().nextInt();
            }
            @Override
            public void start() {
                System.out.println("Started with speed: " + getSpeed());
            }
        };
    }

    public void start(Vehicle vehicle) {
        vehicle.start();
    }
}
→ Ссылка
Автор решения: Aziz Umarov

Я предложил бы для начала разобраться с интерфейсами. Это одна из 2 возможных абстракций в ООП. Почему абстракций - потому что нельзя создать экземпляр объекта из абстракции.

Вас интересует применение их в качестве параметров и результата методов. Тут как раз таки все просто. Нужно понять casting когда вы из объекта выделяете интерфейс который он реализовал.

 List<String> list = new ArrayList<>();

В данном примере мы выделяем интерфейс List из объекта ArrayList. Вот применительно к методам.

 public List<String> fillRandomData(List<String> list) {
    // Заполняем list используя только методы List
    // при чем нам знать из какого он объекта был выделен нет необходимости.
    .....
    return list; // возращяем список.
  }

Интересен вызов данного метода. Вы можете передать fillRandomData любой класс который реализовал нужный интерфейс и получить в результате то что нужно.

 List<String> randomLinkedList = fillRandomData(new LinkedList<String>());
 List<String> randomArrayList = fillRandomData(new ArrayList<String>());
  
  
→ Ссылка