5

私は動物園というプログラムを持っており、動物園には爬虫類である動物の枝分かれしたサブグループがあります。equals メソッドを実行すると、メイン プログラムがコンパイルされて実行されます。特にintやStringではなくオブジェクトを比較している場合、Javaはequalsメソッドの使用をどのように知っているのでしょうか。

public class Zoo {

    public static void main(String[]args) {
        Animal a=new Animal("Bob");
        Reptile komodo= new Reptile("Snakey");
        komodo.bask();
        a.size=3;
        komodo.size=5;
        System.out.println(a);
        System.out.println(komodo);
        Turtle t= new Turtle("Slowy");
        t.hide();
        t.size=6;
        t.numlegs=4;
        System.out.println(t);
        System.out.println(t.equals(komodo));
    }
}

public class Animal {
    public String name;

    public boolean equals(Animal other) {
        return other.size==this.size;
    }

    public Animal(String s) {
        name=s;
    }
    public void setName(String n) {
        this.name=n;
    }
    public void eat(String meal) {
        System.out.println("chump chump yummy "+meal);
    }
    public int size;

    public String toString() {
        return "I am "+name+" and I'm "+size+" cm long";
    }

}

public class Reptile extends Animal {

    public Reptile(String n) {
        super(n);
        numlegs=0;
    }
    public Reptile(String n, int l) {
        super(n);
        numlegs=l;
    }

    public void bask() {
        System.out.println("basking...");
    }
    public String toString() {
        return super.toString()+numlegs+" legs";
    }

    public int numlegs;
}
public class Turtle extends Reptile {

    public Turtle(String n) {
        super (n,4);
        shellColor="Brown";
    }
    public void hide() {
        System.out.println("you cant see me");
    }
    public String toString() {
        return super.toString()+" and my shell is"+ shellColor;
    }
    public String shellColor;

    public void bask() {
        super.bask();
        System.out.println("turtle is basking...");
    }

}
4

3 に答える 3

11

Object#equalsメソッドをオーバーライドしているのではなく、オーバーロードしています。メソッド宣言ではAnimal、代わりに typeを使用しObjectます。

public boolean equals(Animal other)

メソッドの適切なオーバーライドは、instanceof演算子を使用することです。例を示します:

@Override
public boolean equals(Object other) {
    if(other instanceof Animal) {
        Animal otherAnimal = (Animal)other;
        //comparison logic...
    }
    return false;
}

この件に関する詳細情報:

于 2013-07-09T14:49:17.043 に答える
2

Javaがオブジェクトを比較する方法をどのように知っているかについての質問については、equalsメソッドをオーバーライドする必要があります

 public boolean equals(Object other){
    // return true or false based on your logic

  }

比較するときは、equals メソッドを使用します。equals メソッドの重要性を説明するこの優れたチュートリアルをご覧ください。

http://www.thejavageek.com/2013/06/26/what-is-the-significance-of-equals-method-in-Java/

また、ハッシュを使用するコレクションにオブジェクトを使用している場合、equals をオーバーライドするだけでは十分ではありません。あなたは良いチュートリアルを見つけるでしょう

http://www.thejavageek.com/2013/06/28/significance-of-equals-and-hashcode/

于 2013-07-09T14:50:02.760 に答える