当前位置: 技术问答>java相关
这个结果如何理解?(菜鸟级问题)
来源: 互联网 发布时间:2015-01-18
本文导语: public class Point2D { int x; int y; Point2D() { this(0, 0); } Point2D(int i) { this(i, 0); } Point2D(int i, int j) { x = i; y = j; } ...
public class Point2D {
int x;
int y;
Point2D() {
this(0, 0);
}
Point2D(int i) {
this(i, 0);
}
Point2D(int i, int j) {
x = i;
y = j;
}
double length() {
return Math.sqrt(x * x + y * y);
}
}
public class MyPoint extends Point2D {
int x;
int y;
MyPoint(int i, int j) {
super(i, j);
x = i;
y = j;
}
double distance() {
return Math.abs(length() - super.length());
}
double length() {
return Math.sqrt(x * x + y * y);
}
}
import java.io.PrintWriter;
public class PointTest {
public static void main(String args[]) {
PrintWriter printwriter = new PrintWriter(System.out, true);
MyPoint mypoint = new MyPoint(4, 3);
Point2D point2d = new Point2D(11);
MyPoint mypoint1 = mypoint;
mypoint.x = 5;
mypoint.y = 12;
printwriter.println("ntCasting Test:n");
printwriter.println("(Point2D)mp = (" + ((Point2D) (mypoint)).x + ", " + ((Point2D) (mypoint)).y + ")");
printwriter.println("(MyPoint)q = (" + ((MyPoint)mypoint1).x + ", " + ((MyPoint)mypoint1).y + ")");
}
}
该程序输出结果是:
(Point2D)mp = (4, 3)
(MyPoint)q = (5, 12)
这个结果好象和我的理解有点出入。
各位大虾
麻烦哪位能帮忙解释一下吗?
谢谢!
int x;
int y;
Point2D() {
this(0, 0);
}
Point2D(int i) {
this(i, 0);
}
Point2D(int i, int j) {
x = i;
y = j;
}
double length() {
return Math.sqrt(x * x + y * y);
}
}
public class MyPoint extends Point2D {
int x;
int y;
MyPoint(int i, int j) {
super(i, j);
x = i;
y = j;
}
double distance() {
return Math.abs(length() - super.length());
}
double length() {
return Math.sqrt(x * x + y * y);
}
}
import java.io.PrintWriter;
public class PointTest {
public static void main(String args[]) {
PrintWriter printwriter = new PrintWriter(System.out, true);
MyPoint mypoint = new MyPoint(4, 3);
Point2D point2d = new Point2D(11);
MyPoint mypoint1 = mypoint;
mypoint.x = 5;
mypoint.y = 12;
printwriter.println("ntCasting Test:n");
printwriter.println("(Point2D)mp = (" + ((Point2D) (mypoint)).x + ", " + ((Point2D) (mypoint)).y + ")");
printwriter.println("(MyPoint)q = (" + ((MyPoint)mypoint1).x + ", " + ((MyPoint)mypoint1).y + ")");
}
}
该程序输出结果是:
(Point2D)mp = (4, 3)
(MyPoint)q = (5, 12)
这个结果好象和我的理解有点出入。
各位大虾
麻烦哪位能帮忙解释一下吗?
谢谢!
|
不是解释!! 你可以用调试程序跟踪一下,或简单一点,在每一个可以的地方加上System.out.pringln标注程序执行的过程。一般在构造器和方法函数中。
|
第二个结果很清楚,那个(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).
因为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).