请问java中equals(),toString()怎么重写?

原题目:
用 QingApple类继承Apple类并且在子类QingApple中重写equals()和
toString()方法,并且功能要增加
,所以我就增加了delicious这个特点,但是总是有错误
希望哪位高手能够帮我解决这个燃眉之急的问题!
虽然有点麻烦,但希望哪位好心人帮忙看一下下面这个程序:
class Apple{
private String color;
private boolean ripe;
public Apple(String aColor,boolean isRipe){
color=aColor;
ripe=isRipe;
}
public void setColor(String aColor){
color=aColor;
}
public void setRipe(boolean isRipe){
ripe=isRipe;
}
public String getColor(){
return color;
}
public boolean getRipe(){
return ripe;
}
public String toString(){
if(ripe)
return("A ripe"+color+"apple");
else
return("A not so ripe"+color+"apple");
}

}
class QingApple extends Apple{
public boolean delicious;
private QingApple(String aColor,boolean isRipe,boolean isDelicious){
super(aColor,isRipe);
delicious=isDelicious;
}
public void setDelicious(boolean isDelicious){
delicious=isDelicious;
}
public boolean getDelicious(){
return delicious;
}
public String toString(){
return super.toString();
if(delicious)
return ("delicious");
}
public boolean equals(QingApple qingapple){
return (super.equals(Apple apple)+delicious==getDelicious());
}
}
public class TestEqual{
public static void main(String args[]){
QingApple a=new QingApple("red",true,true);
QingApple b=new QingApple("red",true,true);
System.out.println(a+"is equal to"+b+":"+a.equals(b));
System.out.println("a is identical to b:"+(a==b));
QingApple c=a;
System.out.println(a+"is equal to"+c+":"+a.equals(c));
System.out.println("a is identical to c:"+(a==c));
}
}
谢谢!再请问一下:如果在子类中继承父类的equals()方法要怎么办呢?

下面是修改好的 你对比看一下两个程序有什么不同~
错误点有:你构造方法私有了,外面是不可以调用这个构造的; toString重写的有点问题
class Apple {
private String color;
private boolean ripe;

public Apple(String aColor, boolean isRipe) {
color = aColor;
ripe = isRipe;
}

public void setColor(String aColor) {
color = aColor;
}

public void setRipe(boolean isRipe) {
ripe = isRipe;
}

public String getColor() {
return color;
}

public boolean getRipe() {
return ripe;
}

public String toString() {
if (ripe)
return ("A ripe " + color + " apple ");
else
return ("A not so ripe " + color + " apple ");
}

}

class QingApple extends Apple {
public boolean delicious;

public QingApple(String aColor, boolean isRipe, boolean isDelicious) {
super(aColor, isRipe);
delicious = isDelicious;
}

public void setDelicious(boolean isDelicious) {
delicious = isDelicious;
}

public boolean getDelicious() {
return delicious;
}

public String toString() {
return super.toString()+(delicious?"delicious":"undelicious");
}

public boolean equals(QingApple qingapple){
return delicious==qingapple.getDelicious();
}
}

public class TestEqual {
public static void main(String args[]) {
QingApple a = new QingApple("red", true, true);
QingApple b = new QingApple("red", true, true);
System.out.println(a + " is equal to " + b + ":" + a.equals(b));
System.out.println("a is identical to b:" + (a == b));
QingApple c = a;
System.out.println(a + " is equal to" + c + ":" + a.equals(c));
System.out.println("a is identical to c:" + (a == c));
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-10
chinagenius 他写的

toString()方法你重写他的目的是为了输出该对象的时候能打出你想要的效果 所以不一定非得调用父类的方法 你完全可以在里面return一些你想要让使用者知道的东西

至于equals方法自然也是一样的 你可以在equals方法对对象进行判断 你可以根据你对象的一个属性判断也可以根据对象的全部属性判断 反正都是由你控制拉~

重写的重点在于 你能够获得你想要的效果

那好象得重写 因为父类的EQUALS可能有其他的操作嘎 但那操作很可能只能对父类使用 所以 一般情况下 如果父类重写了EQUALS方法 子类好象也得重写 我没实验过 所以你自己实验下吧
第2个回答  2008-12-09
package base;

class Apple {
private String color;
private boolean ripe;

public Apple(String aColor, boolean isRipe) {
color = aColor;
ripe = isRipe;
}

public void setColor(String aColor) {
color = aColor;
}

public void setRipe(boolean isRipe) {
ripe = isRipe;
}

public String getColor() {
return color;
}

public boolean getRipe() {
return ripe;
}

public String toString() {
if (ripe)
return ("A ripe" + color + "apple");
else
return ("A not so ripe" + color + "apple");
}

}

class QingApple extends Apple {
public boolean delicious;

//这里你的类设为private,在TestEqual类里就无法访问,所以就错了
public QingApple(String aColor, boolean isRipe, boolean isDelicious) {
super(aColor, isRipe);
delicious = isDelicious;
}

public void setDelicious(boolean isDelicious) {
delicious = isDelicious;
}

public boolean getDelicious() {
return delicious;
}

public String toString() {
// return super.toString();
if (delicious)
return ("delicious");
return null;
}

//你的父类Apple根本没有实现equals方法,所以在此根本不能调用equals()
//不太清楚你想要实现的逻辑,所以就不帮你写了,基本概念要好好看看书
//再练,这里主要是继承与多态的概念,概念没弄好,硬写代码是没用的
// public boolean equals(QingApple qingapple) {
// return (super.equals(qingapple) + delicious == getDelicious());
// }
}

public class TestEqual {
public static void main(String args[]) {
QingApple a = new QingApple("red", true, true);
QingApple b = new QingApple("red", true, true);
System.out.println(a + "is equal to" + b + ":" + a.equals(b));
System.out.println("a is identical to b:" + (a == b));
QingApple c = a;
System.out.println(a + "is equal to" + c + ":" + a.equals(c));
System.out.println("a is identical to c:" + (a == c));
}
}