First of all you need to be aware that a "final class" in Java does not mean immutable, it means "un-inheritable". Immutability using "final" keyword only works for variables (and only after you set their initial value).
If you want Item to be un-inheritable (final class) and you also want IPAddress and PhysicalAdress to be final as well, you can use interfaces. (Edit: it's not a requirement for those two classes to be final, just wanted to note that you can keep them final if you actually need to, although as others have commented you should really be sure that you need it to be final).
You could change Item to be an interface and make IPAddress and PhysicalAddress implement that interface.
This way AdressBook actually adds objects of type "ItemInterface" (bad mnemonic but you get the idea) and as long as you manage to abstract common operations for all Items, you can use the interfaces instead of inheritance.
e.g.
public interface ItemInterface{
public Object getItemValue();
public void setItemValue(Object value);
}
public final class IPAddress implements ItemInterface{
@Override
public Object getItemValue(){
...
}
@Override
public void setItemValue(Object value){
...
}
}
and then you can do:
public class AddressBook {
public void add(ItemInterface item) {
itemsList.add(item);
// or whatever other structure you use to store items
}
}
In general as you develop more and more complex code it becomes more useful to program to an interface than try to keep using inheritance.
This way, whenever you need to add another type of entry to your AddressBook, you can make it implement ItemInterface and ideally you won't have to change a line inside AddressBook because everything is an ItemInterface.