Bruce Eckel’s Thinking in Java | Contents | Prev | Next |
that you’ve been introduced to inheritance, the keyword
protected
finally has meaning. In an ideal world,
private
members would always be hard-and-fast
private,
but in real projects there are times when you want to make something hidden
from the world at large and yet allow access for members of derived classes. The
protected
keyword is a nod to pragmatism. It says “This is
private
as far as the class user is concerned, but available to anyone who inherits
from this class or anyone else in the same
package.”
That is, protected
in Java is automatically “friendly.”
best tack to take is to leave the data members private
– you should always preserve your right to change the underlying
implementation. You can then allow controlled access to inheritors of your
class through protected
methods:
//: Orc.java // The protected keyword import java.util.*; class Villain { private int i; protected int read() { return i; } protected void set(int ii) { i = ii; } public Villain(int ii) { i = ii; } public int value(int m) { return m*i; } } public class Orc extends Villain { private int j; public Orc(int jj) { super(jj); j = jj; } public void change(int x) { set(x); } } ///:~