GeeCON Prague 2014*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Access Modifier/Package Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Access Modifier/Package" Watch "Access Modifier/Package" New topic
Author

Access Modifier/Package

Nabila Mohammad
Ranch Hand

Joined: Nov 05, 2007
Posts: 661
This is from an online Mock Exam - http://www.akgupta.com/Java/mock_exam.htm






The say() method defined in Super.java has a protected modifier
That would mean it's accessible within the it's own package and in the subclass which may be outside the package.

But i still get the error in line 7 and 8 , something to do with protected modifier.

I think I am missing something ..just dont know what!


The future belongs to those who believe in the beauty of their dreams.Dream BIG!
Harshit Rastogi
Ranch Hand

Joined: Apr 15, 2008
Posts: 131
Hi
The line 7 and 8 gives error because you can acces a protected method only via class which has inherited it and not by directly creating a object of a class in a different package.


<a href="http://technologiquepanorama.wordpress.com" target="_blank" rel="nofollow">My Techie Blog</a><br /><a href="http://www.java-questions.com" target="_blank" rel="nofollow">Java Questions</a>
vidhya suvarna
Ranch Hand

Joined: Aug 28, 2008
Posts: 148
The code is giving Compiler Error because the method say() in Super is available to SubTwo & SubOne via inheritance though its access is protected.
So you do not need any reference to access them, they can be access just be their name.


SCJP 1.4 - 88%<br />SCWCD 1.5 - Preparing
Harshit Rastogi
Ranch Hand

Joined: Apr 15, 2008
Posts: 131
Originally posted by Harshit Rastogi:
Hi
The line 7 and 8 gives error because you can acces a protected method only via class which has inherited it and not by directly creating a object of a class in a different package.


Let me rephrase it
The line 7 and 8 gives error because you can acces a protected method only via class object (SubTwo) which has inherited it and not by directly creating a object of a class directly (Super, SubOne)in a different package.
Nabila Mohammad
Ranch Hand

Joined: Nov 05, 2007
Posts: 661
I have slightly modified the code.




Thanks.
I kind of rememeber something about accesing protected members through inheritance and not by reference...
But i still can't the right statement for acessing say() in Super and SubOne class.

If i could get some help with that....
[ September 11, 2008: Message edited by: Nabila Mohammad ]
vidhya suvarna
Ranch Hand

Joined: Aug 28, 2008
Posts: 148
For the code you provided at the start, you can access the say() of Super by say("Java")...
Paul Somnath
Ranch Hand

Joined: May 19, 2008
Posts: 177
@NABILA MOHAMMAD
Remember that a protected class members can be always accessed thorough inheritance but not through references.
Have a look at the following code:



So the say method cannot be accessed through reference.
Can you spot the difference now?
For more explanations, goto K&B: page 34-39..

Have a look at this url for more.
[ September 12, 2008: Message edited by: Paul Somnath ]

Preparing for SCJP 6.0
Nabila Mohammad
Ranch Hand

Joined: Nov 05, 2007
Posts: 661
Originally posted by Paul Somnath:
@NABILA MOHAMMAD
Remember that a protected class members can be always accessed thorough inheritance but not through references.
Have a look at the following code:



So the say method cannot be accessed through reference.
Can you spot the difference now?
For more explanations, goto K&B: page 34-39..

Have a look at this url for more.

[ September 12, 2008: Message edited by: Paul Somnath ]


Hi Paul,
Thanks for the explanation.
I had already gone through the website as well as the K&B.

However they have both mentioned accessing variable in the Parent class-
which has not been re defined in the child class.

If i have defined a say() method in all the three classes - Super,Subone and SubTwo
Or a variable s in all the three - that case how do I call the variable or method in Super or SubOne class because it will always give the value of SubTwo.I mean is it even possible!?
[ September 12, 2008: Message edited by: Nabila Mohammad ]
 
GeeCON Prague 2014
 
subject: Access Modifier/Package