Hello Ellery,
Tee hee. I can make the compiler swallow something silly:
module silly;
interface I{
void foo();
}
class C: public private protected package protected public protected
public private protected package I{
void foo(){}
}
void main(){}
Um. OK. It turns out it's easier to make the compiler eat that than it is
to make it reject it. Also sometimes it's handy to have it look at only the
last cases (I think that's what it does). As an example, in generated code.
Another example of this is in unix command line apps that often have on/off
flag pairs that can be mixed ad-nauseum because they grab flags from several
different sources that need to override each other.