The two instance variables can be made private.
MyPoint with better Encapsulation
Here is a revised version of the program.
Now MyPoint objects are immutable.
Methods can't change the object,
even if they have a reference to it.
All they can do is call the object's public methods.
class ImmutablePoint
{
private int x, y;
public ImmutablePoint( int px, int py )
{
x = px; y = py;
}
public void print()
{
System.out.println("x = " + x + "; y = " + y );
}
}
class PointPrinter
{
public void print( ImmutablePoint p )
{
p.print(); // call a public method
p.x = 77 ; // WRONG! can't do this
}
}
class PointTester
{
public static void main ( String[] args )
{
ImmutablePoint pt = new ImmutablePoint( 4, 8 );
pt.print(); // call a public method
pt.x = 88; // WRONG! can't do this
PointPrinter pptr = new PointPrinter();
pptr.print( pt ); // ca
}
}
Since ImmutablePoint objects are immutable,
a constructor is needed to initialize instance variables to their
permanent values.
(Thought Question:) Would it be possible to write a
PointDoubler class for ImmutablePoint objects?