aspose file tools*
The moose likes Java in General and the fly likes Whats wrong with the protected method? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Whats wrong with the protected method?" Watch "Whats wrong with the protected method?" New topic
Author

Whats wrong with the protected method?

Jaspreet Singh
Greenhorn

Joined: Jul 07, 2005
Posts: 8


Why does a call to sub.protectedmethod() gives an error saying 'protectedmethod() not visible' ? Is not class MySubclass inheriting protectedmethod() from MyObject ?

The only way I get to compile this is by redefining protectedmethod() in MySubclass.



Now isn't that something that inheritence should do - bring a copy of protected methods (protectedmethod()) down to the Subclass? Why do I have to redefine it in the Subclass for it to be invoked?
Tony Morris
Ranch Hand

Joined: Sep 24, 2003
Posts: 1608

sub.protectedmethod(); // Why does this give error?

Because the class that this call is defined in is not either:
a) in the same package
b) a subtype
...of the type that declares the method.


Tony Morris
Java Q&A (FAQ, Trivia)
Jaspreet Singh
Greenhorn

Joined: Jul 07, 2005
Posts: 8
Well, in that case, if I make Test extend MyObject, it should enable calling sub.protectedmethod(); from MySubclass?

Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24184
    
  34

Nope. Only code in SubClass, or a subclass of SubClass, can call that protected method on a SubClass object. Extending MyObject is not enough. That's just how it works.

If you want to make the method available to other random code, then yes, you have to override it to make it a public method, as in your first example.


[Jess in Action][AskingGoodQuestions]
Jaspreet Singh
Greenhorn

Joined: Jul 07, 2005
Posts: 8
Originally posted by Ernest Friedman-Hill:
Nope. Only code in SubClass, or a subclass of SubClass, can call that protected method on a SubClass object. Extending MyObject is not enough. That's just how it works.

If you want to make the method available to other random code, then yes, you have to override it to make it a public method, as in your first example.


Ok, I'll live by that rule now. But I don't really understand the reasoning behind it.

Consider Object. It's clone() is protected. Now it is not available to any class in the Java World unless it redefines this method. While I don't know what's the spirit behind such an implementation, it definitely is not making use of code reuse, you see.
 
 
subject: Whats wrong with the protected method?