The UVM TLM code is vastly overcomplicated by the fact that it was written before SV had multiple interface inheritance. You get an runtime error if you try calling a method that has not been overridden. If this was recoded using the current standard, you would be able to get a compiler error.