That really told me all
a) It is situation-specific. Java enforces a "one class, one file" rule while C#/C++ do not. But this approach frequently makes sense, particularly when many people are working on the same file. Smaller files, fewer merges. So if more than, say, 3 people may be working on it, that is probably the desirable approach.