A good answer might be:

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 because even with a reference, methods can't make any changes to the object.

class ImmutablePoint
{
  private int x, y;

  public Point( 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();

    p.x = 77 ; // WRONG! can't do this 
  }
}

class PointTester
{
  public static void main ( String[] args )
  {
    ImmutablePoint pt = 
        new ImmutablePoint( 4, 8 );
    pt.print();
    
    pt.x = 88;  // WRONG! can't do this

    PointPrinter pptr = new PointPrinter();
    pptr.print( pt );
        
  }
}

Since ImmutablePoint objects are immutable, a constructor is needed to initialize instance variables to their permanent values.

QUESTION 13:

(Thought Question:) Would it be possible to write a PointDoubler class for ImmutablePoint objects?