The main reason is to avoid class name conflicts.
Suppose you have an abc package with classes A , B and C And the xyz package with classes M , N and ... C
Suppose we import classes B and N We can import them correctly:
import abcB; import xyzN;
but we can be lazy and write:
import abc*; import xyz*;
In the first case, everything will be fine. And in the second there will be a conflict of names between the classes abcC and xyzC . Since there are many quite generic class names (especially interfaces, such as some Event , Listener , Command , etc.), it is worthwhile to import them explicitly in order to avoid conflict.