Classes can simply override that method. The default implementation of new is:
^ self basicNew initialize
And basicNew is a method that allocates and returns an instance of the receiver.So a custom implementation can easily change self to some other class, chain more messages or replace initialize with something else, add more logic before an object is returned and so on.
> And wouldn't that just make the "new" method a factory?
Smalltalk actually predates the discovery of object-oriented design patterns by a couple of decades so it's the factory methods that are like the new method. For some reason language designers turned it into a magic keyword and people rediscovered the fact that methods are better.