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
posted
0
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.
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.
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.