While trying to get Stuart Ballard's Japitools to
work on a netexp generated export of IKVM's classpath.dll, I encountered java.awt.BufferCapabilities.FlipContents.
This public (inner) class has non-public base class (java.awt.AttributeValue). What
kind of a bizarre design is that?
I had never realised that the Java language allowed this. Fortunately, the C# designers
didn't make the same mistake.
Note that a similar issue exists for fields (and method arguments). In Java it is
legal to have a public field of a non-public type, or a public method that takes an
argument of a non-public type. C# prohibits both of these.
I fixed netexp to export non-public base classes (and I should do the same for interfaces,
fields and method arguments/return type).