Классы и интерфейсы как параметры методов
Классы и интерфейсы могут использоваться в качестве типа параметров метода или в качестве возвращаемого типа, но я не могу понять данную тему. Пожалуйста можете помочь? Или дать нужную ссылку с легким объяснением?
я хочу узнать как классы и интерфейсы могут использоваться в качестве типа параметров метода или в качестве возвращаемого типа
Ответы (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();
}
}
Я предложил бы для начала разобраться с интерфейсами. Это одна из 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>());