From what I’ve understood, the method HostImplementation is used to instantiate an object of type IPv4AddressImplementation in case of a valid IP address. However, when I instantiate an object of type IPv4AddressImplementation, I get a warning that the object is unused. Should I ignore the warning or is there something I need to do with the object?

The *Implementation classes are only on your end.
The tests exclusively communicate via the interfaces.
There is one interface for Host and another one for IPv4Address that extends (read specializes) Host.

We expect your parser to return IPv4Addresses as hosts when the grammar dictates to do so.
The tests use the method isIPv4Address (discussed in some other topics) to test for this property.

The unused warning comes from the fact that you create an object but do not use it (it is therefore unused).
As it does not change the program behavior it is like you never created it.