Access control
Do you remember about information hiding? In the examples above, everyone could access all the methods and member variables in all objects. For example, it is very easy to lose weight:
h->weight -= 10.0;
Oh? The hamster only weighed 0.12, and now it weighs minus 9.88?
We would like to control the access to the member variable weight
,
so that other classes cannot touch it.
For uses like this,
there are a number of access modifiers,
which are written before the data type
in the definition of a method or member variable.
For example,
the weight of an animal
is represented by the member variable weight
,
defined as:
float weight;
By changing that to
private float weight;
we only allow methods in the same class to access that variable.
The following access modifiers exist:
public
This is the default, and means that any method can access the member variable, or call the method.
private
This means that the member variable or method is only available to methods in the same class.
static
This means that this member variable or method is only available to methods in the same class, and in subclasses (
static
in Pike does not at all mean the same thing asstatic
in C++: instead, it is similar toprotected
in C++).local
This means that even if this method is overridden by a method in a subclass, methods in this class will still use this method.
final
This prevents subclasses from re-defining this method.
If a class has a constructor
(that is, a method called create
)
it can be a good idea to declare it static
.
It is not supposed to be called
except during the construction of the object,
and if it is not static
there may be some type incompatibilities
in connection with inheritance.