不是解释!!  你可以用调试程序跟踪一下,或简单一点,在每一个可以的地方加上System.out.pringln标注程序执行的过程。一般在构造器和方法函数中。

解决方案 »

  1.   

    第二个结果很清楚,那个(Mypoint)类型强制是没有实际意义的,因为mypoint1本来就是这个类的,因此去掉这个类型强制也一样。那句“MyPoint mypoint1 = mypoint”使mypoint1和mypoint具有共同的值,如果换一种付值法,例如"MyPoint mypoint1 = new MyPoint(mypint.x,mypoint.y)"那么第二个结果就是(4,3)了。第一个结果你得这样理解,主要是那个super(i,j)会完成什么操作,当在main方法里定义" MyPoint mypoint = new MyPoint(4, 3);"时super会调用Point2D的构造函数,那么就会形成两个实例,一个是Point2D类型的mypoint,一个是MyPoint类型的mypoint,它们的x,y值都是4,3,当执行完"mypoint.x = 5; mypoint.y = 12;"时,只改变了 mypoint的MyPoint实例,所以当mypoint被类型强制成Point2D时,它的值会是(4,3),如果没有那个super那么第一个结果应该是(0,0).
      

  2.   

    精辟精辟,多谢guojun_2000_2000(阿刺)和bdsc()。
    但是我不知道如何给分,拜托各位指条明路。