Интерфейсы являются единственным способом создания множественного наследования в Java.
Допустим, вы создали класс Animal
. И все животные, включая людей, расширяют это. И каждое из этих животных наследует общие методы, такие как есть, дышать и т. Д.
Но теперь допустим, что у вас есть MathProblem
класс.
И вы хотите иметь определенные классы, которые могут решить эту проблему, передав ее в метод solve(MathProblem problem)
.
И вы знаете, что Human
, но также Computer
может решить математическую задачу. Таким образом, они оба должны быть в состоянии решить эту проблему. Возможно, вы сможете заставить Компьютер расширить некоторый класс MathSolver
, который имеет метод, но Человек уже расширяет Animal и не может расширять что-либо еще. Таким образом, лучший способ - сделать MathSolver интерфейсом и иметь как Human
, Computer
, так и любые другие классы, которые должны решать проблемы, реализующие это.
Также обратите внимание, что Human
и Computer
могут решить проблемы совершенно по-разному, поскольку их такие разные объекты. Вот для чего лучше всего использовать интерфейсы. Определение определенных способностей, которые пересекают несколько иерархий наследования и могут иметь очень разные реализации, но все они могут быть переданы методу, который принимает любую из них. Подумайте об интерфейсе Comparable
; это не то, что имеет определенный класс объектов, все виды вещей можно сравнивать, и, как правило, совершенно по-разному. Но вы всегда можете вызвать сортировку для List
из Comparable
объектов, поскольку вы знаете, что они имеют определенный порядок, независимо от того, являются ли они Numbers
, Animals
, Computers
или чем-то еще (до тех пор, пока реализовать Comparable
и определить их порядок).