Normally, a class does not receive any "extra functionalities" by implementing an interface.
(This has changed a bit since java 8, because interfaces can now contain default
methods, so it is actually possible to receive extra functionality by implementing an interface, but that's not what this question is about.)
When implementing an interface, a class has to provide all the functionality that the interface requires to be provided. Code must be added to the class to provide that functionality. ArrayList
does all that in order to offer the List
interface.
So, you might ask, what's the point of implementing an interface?
The point is that then in your code you can refer to the list as simply a List
, without knowing that it is actually an ArrayList
, which means that your code can then work with any class that implements the List
interface, not just with ArrayList
.
As for your 2nd question: the answer is "yes".