In Java, you can define multiple top level classes in a single file, providing that at most one of these is public (see [JLS §7.6](http://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.6)). See below for example.

1. Is there a tidy name for this technique (analogous to `inner`, `nested`, `anonymous`)?
2. The JLS says the system **may** enforce the restriction that these secondary classes can't be `referred to by code in other compilation units of the package`, e.g., they can't be treated as package-private. Is that really something that changes between Java implementations?

e.g., PublicClass.java:

```
package com.example.multiple;

public class PublicClass {
    PrivateImpl impl = new PrivateImpl();
}

class PrivateImpl {
    int implementationData;
}

```