[Patch] PR java/9685: Fix Catching Illegal Access to Package-Private Fields/Members

Andrew Haley aph@redhat.com
Thu Apr 22 17:26:00 GMT 2004


Tom Tromey writes:
 > > // p1/T151221am3c.java 
 > > package p1;
 > > abstract class T151221am3a {
 > >     abstract void m(); // note non-public accessibility
 > > }
 > > interface T151221am3b {
 > >     void m() throws Exception;
 > > }
 > > public abstract class T151221am3c extends T151221am3a implements T151221am3b {
 > >     // inherits 2 versions of m()
 > > }
 > 
 > > // T151221am3d.java
 > > abstract class T151221am3d extends p1.T151221am3c {
 > >     // a concrete subclass of c will necessarily have an implementation of m
 > >     // that does not throw, in order to implement a.m; but only b.m was
 > >     // inherited here because of accessibility. Since b.m throws, the catch
 > >     // clause is reachable
 > >     {
 > >         try {
 > >             m();
 > >         } catch (Exception e) {
 > >         }
 > >     }
 > > }
 > 
 > Andrew> m() in p1.T151221am3a can't implement m() in p1.T151221am3b
 > Andrew> because it is non-public.
 > 
 > Actually, T151221am3b.m() is implicitly public because it is declared
 > in an interface.

Yes, I know that.  The "it" is T151221am3a.m() in p1.  :-)

 > I think the code above, while twisted, is legal.

Okay.  I suppose it must be, given that it's a test case, older
versions of javac reject it, and newer versions allow it.

Andrew.



More information about the Gcc-patches mailing list