Thinkpadder
Cadet 1st Year
- Registriert
- Jan. 2024
- Beiträge
- 11
Hey, mal eine kleine Verständnisfrage zu einer Funktion bei oop, wenn es darum geht, die .equals Methode in einer Klasse neu zu belegen, um damit anstelle einzelner Werte Objekte mit mehreren Variablen miteinander zu vergleichen. An einer Stelle wird dafür der Typ des zu vergleichenden Objekts zu dem des vorliegenden Objekts konvertiert. Dazu hat sich bei mir eine Frage aufgetan, die ich unter dem folgenden Code platziert habe.
Der Code und die Erläuterung stammen aus dem Programmierkurs von der Uni Helsinki (MOOC.FI) - Absatz Comparing the equality of objects (equals)
"The equals method is implemented in such a way that it can be used to compare the current object with any other object. The method receives an Object-type object as its single parameter — all objects are Object-type, in addition to their own type. The equals method first compares if the addresses are equal: if so, the objects are equal. After this, we examine if the types of the objects are the same: if not, the objects are not equal. Next, the Object-type object passed as the parameter is converted to the type of the object that is being examined by using a type cast, so that the values of the object variables can be compared. Below the equality comparison has been implemented for the SimpleDate class"
Was ich hier nun leider nicht verstehe, ist folgende Zeile:
Wieso ist es an dieser Stelle nötig, den Typ des Objekts zu konvertieren? Ich verstehe, dass es aus irgendeinem Grund notwendig ist, für einen funktionierenden Vergleich zwei Objekte desselben Typs vorliegen zu haben. Aber in diesem Fall werden ja zwei Objekte derselben Klasse miteinander verglichen und müssten - meinem Verständnis nach - gar nicht erst konvertiert werden? Beide Objekte sind vom selben Typ namens "SimpleDate". Ich hoffe, es wird klar, was ich meine.
Der Code und die Erläuterung stammen aus dem Programmierkurs von der Uni Helsinki (MOOC.FI) - Absatz Comparing the equality of objects (equals)
"The equals method is implemented in such a way that it can be used to compare the current object with any other object. The method receives an Object-type object as its single parameter — all objects are Object-type, in addition to their own type. The equals method first compares if the addresses are equal: if so, the objects are equal. After this, we examine if the types of the objects are the same: if not, the objects are not equal. Next, the Object-type object passed as the parameter is converted to the type of the object that is being examined by using a type cast, so that the values of the object variables can be compared. Below the equality comparison has been implemented for the SimpleDate class"
Code:
public class SimpleDate {
private int day;
private int month;
private int year;
public SimpleDate(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public int getDay() {
return this.day;
}
public int getMonth() {
return this.month;
}
public int getYear() {
return this.year;
}
public boolean equals(Object compared) {
// if the variables are located in the same position, they are equal
if (this == compared) {
return true;
}
// if the type of the compared object is not SimpleDate, the objects are not equal
if (!(compared instanceof SimpleDate)) {
return false;
}
// convert the Object type compared object
// into a SimpleDate type object called comparedSimpleDate
SimpleDate comparedSimpleDate = (SimpleDate) compared;
// if the values of the object variables are the same, the objects are equal
if (this.day == comparedSimpleDate.day &&
this.month == comparedSimpleDate.month &&
this.year == comparedSimpleDate.year) {
return true;
}
// otherwise the objects are not equal
return false;
}
@Override
public String toString() {
return this.day + "." + this.month + "." + this.year;
}
}
Was ich hier nun leider nicht verstehe, ist folgende Zeile:
Code:
SimpleDate comparedSimpleDate = (SimpleDate) compared;
Wieso ist es an dieser Stelle nötig, den Typ des Objekts zu konvertieren? Ich verstehe, dass es aus irgendeinem Grund notwendig ist, für einen funktionierenden Vergleich zwei Objekte desselben Typs vorliegen zu haben. Aber in diesem Fall werden ja zwei Objekte derselben Klasse miteinander verglichen und müssten - meinem Verständnis nach - gar nicht erst konvertiert werden? Beide Objekte sind vom selben Typ namens "SimpleDate". Ich hoffe, es wird klar, was ich meine.