Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / April 2007

Tip: Looking for answers? Try searching our database.

child access to parent class protected member

Thread view: 
cy - 13 Apr 2007 01:29 GMT
My question involves child class access to protected member of parent
class. (Arose from attempting to solve exercise in Bruce Eckel's
book).
The following three files, each in its own separate packages, compile
and run just fine:
/* // in separate package:
* public interface Ex6Interface {
*       String say();
* }
*
* // and in a second package:
* public class Ex6Base {
*       protected class Ex6BaseInner implements Ex6Interface {
*               public String say() { return "Hi"; }
*       }
*       public Ex6BaseInner getEx6BaseInner() {
*               return new Ex6BaseInner();
*       }
* }
*/
import innerclasses.ex6Interface.*;
import innerclasses.ex6Base.*;

public class Ex6 extends Ex6Base {
       Ex6Interface getBaseInner() {
               // Error: Ex6BaseInner has protected access:
               // return this.new Ex6BaseInner();
               // So, to create protected class use public method:
               return this.getEx6BaseInner();
       }
       public static void main(String[] args) {
               Ex6 ex = new Ex6();
               System.out.println(ex.getBaseInner().say());
       }
}

-----------------
I left in my comments in the getBaseInner() method, to show error I
got with line: return this.new ExBaseInner();
which I thought should work.
Why do we neet a public method to access protected class member
Ex6BaseInner of parent Ex6Base?  Don't subclasses have access to
protected member of parent class?
Greg
Filip Larsen - 13 Apr 2007 08:02 GMT
> My question involves child class access to protected member of parent
> class.

> Why do we neet a public method to access protected class member
> Ex6BaseInner of parent Ex6Base?  Don't subclasses have access to
> protected member of parent class?

The line "return new Ex6BaseInner();" relies on an accessible
constructor, but there are none because the default constructor of
Ex6BaseInner is protected due to Ex6BaseInner being a protected class.
See section 8.8.9 in the JLS [1] for details.

You example will work if you just add a public constructor to Ex6BaseInner.

[1]
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.9

Regards,
Signature

Filip Larsen

Piotr Kobzda - 13 Apr 2007 08:13 GMT
>> My question involves child class access to protected member of parent
>> class.
[quoted text clipped - 9 lines]
>
> You example will work if you just add a public constructor to Ex6BaseInner.

Another solution, not requiring publicly accessible constructor in
Ex6BaseInner, might be introducing another inner class in the Ex6 which
extends inherited Ex6BaseInner class.  In particular, that inner class
may be anonymous, so the following should work as well:

    return this.new Ex6BaseInner() { };

piotr


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.