怎样改写方法体使结果正确public class Point2D {
protected double x, y;
public Point2D(double x, double y) {
this.x = x;
this.y = y;
}
public Point2D() {
this(0, 0);
}
public boolean equals(Point2D p) {
if(p instanceof Point3D){
return false;//一个2D,一个3D直接false;可是如果两个比较的都是3D的?
}else{
return x == p.x && y == p.y;
}
}class Point3D extends Point2D{
protected double z;
public Point3D(double x,double y,double z){
super(x,y);
this.z=z;
}
public boolean equals(Point3D p) {
return x == p.x && y == p.y&&z==p.z;
}
}
protected double x, y;
public Point2D(double x, double y) {
this.x = x;
this.y = y;
}
public Point2D() {
this(0, 0);
}
public boolean equals(Point2D p) {
if(p instanceof Point3D){
return false;//一个2D,一个3D直接false;可是如果两个比较的都是3D的?
}else{
return x == p.x && y == p.y;
}
}class Point3D extends Point2D{
protected double z;
public Point3D(double x,double y,double z){
super(x,y);
this.z=z;
}
public boolean equals(Point3D p) {
return x == p.x && y == p.y&&z==p.z;
}
}
// Point2D的equals
public boolean equals(Point2D p) {
if (p instanceof Point2D) {
return x == p.x && y == p.y;
}
return false;
}// Point3D的equals
@Override
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;
}处理思路是这样的:
1. Point2D中只能处理2d的类,2d中不能出现子类3d的任何引用。如果将来出现了4d,5d这么办?是不是还得加判断?
2. Point2D的参数不对,和父类不一样,并不是一个覆写的方法(如果实现了覆写,this实例就一定是这个对象本身,免去的判断和转换的操作,而且具有拓展性),这里需要将参数改成Point2D,另外在方法里面判断p是不是3d,是的话,强转并进行判断。
在Point2D中添加方法
@Override
public String toString(){
String p="("+x+","+y+")";
return p;
}
在Point3D中添加方法
@Override
public String toString(){
String p="("+x+","+y+","+z+")";
return p;
}
我自己测试了,可以用的,也可以把@Override省略