「equals()」が Java でどのように機能するかを理解しようとしています。特に「toString()」とは対照的です。これは、私をコースから外している例です。
public class Car
{
String make, model;
public Car( String model, String make )
{
this.make = model;
this.model = make;
}
public String toString()
{
String str = "This is a car. ";
str += "Make: " + make + " | Model: " + model;
return str;
}
public boolean equals( Car c )
{
return ( make.equals( c.make ) && model.equals( c.model ) );
}
}
public class Node
{
protected Object obj;
protected Node next;
public Node( Object o )
{
this.obj = o;
this.next = null;
}
public String toString()
{
return obj.toString();
}
public boolean equals( Node n )
{
return ( this.obj.equals( n.obj ) );
}
}
Car c1 = new Car("toyota", "corolla");
Car c2 = new Car("toyota", "corolla");
Node nC1 = new Node( c1 );
Node nC2 = new Node( c2 );
nC1.print();
nC2.print();
if( nC1.equals( nC2 ) )
System.out.println("They are equal!");
else
System.out.println("They are NOT equal!");
ここで nC1.print() と nC2.print() は期待どおりに動作します。版画:
This is a car. Make: toyota | Model: corolla
This is a car. Make: toyota | Model: corolla
ただし、 nC1.equals( nC2 ) では、次のように出力されます。
"They are NOT equal!"
要するに、問題は「toString()」をオーバーライドできますが、「equals()」はオーバーライドできないということです。私は何が欠けていますか?この動作には簡単な説明があると思います。