In Chapter 2, Modules, Packages and Data Type Concepts, we learned how to create new namespaces using modules. As you may recall, modules are used to define functions so that they are logically separated. It is possible, then, that we can define two different functions—one in module X and another in module Y, with both having exactly the same name. In fact, these functions do not even need to mean the same thing. For example, in a mathematics package, we can define a trace function for matrices. In a computer graphics package, we can define a trace function for doing ray tracing work. These two trace functions perform different things, and they do not interfere with each other.
On the other hand, a function can also be designed to be extended from another package. For example, in the Base package, the AbstractArray interface is designed to...