package testpoint;
/**
*
}
class Point3D extends Point2D{
protected double z;//新增变量z
public Point3D(double x,double y,double z){//构造方法
super(x,y);//调用父类构造方法,必须写在首行
this.z=z;//初始化
}
public Point3D(){
this(0,0,0);
}
public String toString(){//重写
super.toString();//调被重写的 (x,y,z)
return "(" + x + ", " + y + ","+z+")";//返回
}
public double getDistance(){//重写
super.getDistance();//调父类被重写的 到原点的距离
return Math.sqrt(x*x+y*y+z*z);//返回
}
public boolean equals(Point3D p){//重载(参数变化)重写(参数不变)
return x == p.x && y == p.y&&z==p.z;
}
}
public class TestPoint {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Point2D p1 = new Point2D(3, 4);//p1=(3,4)
Point2D p2 = new Point2D(0, 0);//p2=(0,0)
Point3D p3 = new Point3D(0, 0, 0);//p3=(0,0,0)
Point3D p4 = new Point3D(0, 0, 0);//p4=(0,0,0)
System.out.println(p1 + "到原点的距离:" + p1.getDistance());
System.out.println(p2 + "是否是0:" + p2.isZero());
System.out.println(p1 + "和" + p2 + "是否重合:" + p1.equals(p2));
System.out.println(p3 + "到原点的距离:" + p3.getDistance());
System.out.println(p4 + "是否是0:" + p4.isZero());
System.out.println(p3 + "和" + p4 + "是否重合:" + p3.equals(p4));
Point2D p23 = new Point2D(0, 0);
Point2D p33 = new Point3D(0, 0, 5);
System.out.println(p23 + "和" + p33 + "是否重合:" + p23.equals(p33));
System.out.println(p33 + "和" + p23 + "是否重合:" + p33.equals(p23));

// Point2D的equals
public boolean equals(Point2D p) {
if (p instanceof Point3D) {
return false;
}else{
return x == p.x && y == p.y;
}
// Point3D的equals
public boolean equals(Point2D p) {
if (p instanceof Point3D) {
Point3D p3d = (Point3D)p;
return x == p3d.x && y == p3d.y && z == p3d.z;
}
return false;
}