class Point{ //超类
int x,y;
Point(int x,int y){ //构造方法
this.x=x;
this.y=y;
}
double distance(int x,int y) { //超类方法
int dx=this.x-x; //计算平面上两个点的距离
int dy=this.y-y;
return Math.sqrt(dx*dx+dy*dy);
}
double distance(Point p) { //超类方法重构
return distance(p.x,p.y); //计算平面上一个点到坐标(x,y)的距离
}
}
class Point3d extends Point{ //子类————继承超类Point
int z; //增加空间坐标z
Point3d(int x,int y,int z){ //构造方法
super(x,y);
this.z=z;
}
double distance(int x,int y,int z) { //子类方法
int dx=this.x-x; //计算空间上一个点到坐标(x,y,z)的距离
int dy=this.y-y;
int dz=this.z-z;
return Math.sqrt(dx*dx+dy*dy+dz*dz);
}
double distance(Point3d other) { //子类方法重构
return distance(other.x,other.y,other.z); //计算空间上一个点到另一个点的距离
}
double distance(int x,int y) { //重构超类的同名方法
double dx=this.x-x; //计算空间上的点到平面上的点的距离
double dy=this.y-y;
double dz=this.z;
return Math.sqrt(dx*dx+dy*dy+dz*dz);
}
}
public class Tryhand { //主函数
public static void main(String []args) {
Point3d p1=new Point3d(30,40,10); //实例化
Point3d p2=new Point3d(0,0,0);
Point p=new Point(0,0);
System.out.println("p1="+p1.x+","+p1.y+","+p1.z); //输出各点数值
System.out.println("p2="+p2.x+","+p2.y+","+p2.z);
System.out.println("p="+p.x+","+p.y);
System.out.println("p1.distance(p2)="+p1.distance(p2)); //通过子类方法重构实现
System.out.println("p1.distance(3,4)="+p1.distance(3,4)); //通过子类对超类同名方法重构实现
System.out.println("p.distance(3,4)="+p.distance(3,4)); //通过超类方法实现
}
}