Q:

why even if declared final array list can be extended with new items

Here is my code:
final List<String> items = new ArrayList<>();

items.add("Text name 1");
items.add("Text name 2");
items.add("Text name 3");

I'm curios as to how it is possible to extend items with new members even if it is declared final? What does final here mean than?

A:

final means reference of this list is final which can not be changed.As you can not assign any other list or reinitialize this list.
final List<String> items = new ArrayList<>();
items = otherStringList;//ERROR
items = new ArrayList<>();//ERROR

JLS(§4.12.4) says,
If a final variable holds a reference to an object, then the state
  of the object may be changed by operations on the object, but the variable
  will always refer to the same object.

