And overall, I think the benefits ascribed to using interfaces instead of concrete classes are more theoretical than practical. Sure, you could pass a LinekdList instead of an ArrayList to that function but the results will most likely be disastrous. In practice, having hints on the concrete instance you're getting passed is extremely important.