I think Java and C++ et. al. get it wrong by overloading the . operator. On one hand it means "gimme this field of that object", and on the other hand it's "find this function in the method table of the class". These are completely different things. And it all goes downhill from this mistake.