新手求助!!!!!!拜托拜托

_flowers_ss 2016-05-09 05:12:37
怎样改写方法体使结果正确

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;
}

}
...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
justdo_ 2016-05-10
  • 打赏
  • 举报
回复
引用 3 楼 hemethissoulmate 的回复:
引用 2楼justdo_ 的回复:
感觉有点头疼,p33.equal(p33)都能出错
因为equals()调用的是父类里的,然后发现p33是3D所有直接返回false
哦,我看了一下,Point3D的equals并没有重写Point2D中的equals方法,啊哈哈 我认为要出现理想的结果,重写Object类的toString方法就可以了 在Point2D中添加方法 @Override public String toString(){ String p="("+x+","+y+")"; return p; } 在Point3D中添加方法 @Override public String toString(){ String p="("+x+","+y+","+z+")"; return p; } 我自己测试了,可以用的,也可以把@Override省略
家里敷泥呀 2016-05-10
  • 打赏
  • 举报
回复
订正:2. Point3D的参数不对……
家里敷泥呀 2016-05-10
  • 打赏
  • 举报
回复

// 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,是的话,强转并进行判断。
_flowers_ss 2016-05-10
  • 打赏
  • 举报
回复
引用 5楼Lucas307 的回复:

// 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,是的话,强转并进行判断。
你写的第一个equals()2d的 p instanceof Point2D ,p33是它的子类返回值是true,只比较x和y 还是错的吧?
_flowers_ss 2016-05-09
  • 打赏
  • 举报
回复
引用 1楼里昂2015 的回复:
http://blog.csdn.net/u011627980发来贺电
在哪一篇文里啊?
_flowers_ss 2016-05-09
  • 打赏
  • 举报
回复
引用 2楼justdo_ 的回复:
感觉有点头疼,p33.equal(p33)都能出错
因为equals()调用的是父类里的,然后发现p33是3D所有直接返回false
justdo_ 2016-05-09
  • 打赏
  • 举报
回复
感觉有点头疼,p33.equal(p33)都能出错
killer-leon 2016-05-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/u011627980发来贺电

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧