Java novato aquí, tengo una pregunta básica que se contestó la mitad por las respuestas anteriores en otros hilos o los documentos, pero todavía no entienden completamente el mecanismo y yo quiero estar seguro que cubre los fundamentos (código en la parte inferior, en preguntas medio).
Básicamente, estoy reemplazando el método () iguales para comprobar si dos objetos mydate tienen la misma fecha. Hago un cheque instanceof o si el objeto es un objeto MiFecha, entonces tipo lanzas un objeto temp específicamente a un objeto MiFecha o
, a continuación, se comparan las fechas. ¿Por qué tipo de moldear la variable temporal a la clase MiFecha de o, cuando ya es de la clase MiFecha?
- Cómo se utiliza la variable temporal como una referencia más fácil el objeto que desea ejecutar los iguales comparación ()? Debido a que se utiliza iguales () como la comparación
MyDate.equals(MyOtherDate)
, en el código si no designa una variable para contener la referencia luego te varios errores (temp no se puede resolver como una variable, el tipo de desajuste, etc, básicamente, el compilador no está seguro de dónde a ver a menos que escribe un código más racimo).
2a. Algunos de los otros hilos dijo algo en el sentido de que mientras instanceof comprueba si es una instancia de una clase, comprueba la base de clase, pero no comprueba una subclase. Usted hace el encasillamiento porque usted está diciendo específicamente el compilador para comprobar si ese objeto específico (tipo de fundición de un objeto general a un objeto específico). NOTA: Esto podría ser una pregunta versión específica y sabor tipo, he visto diferentes respuestas a preguntas similares.
2b. De fundición cambia la referencia, no el objeto en sí. Por lo tanto, si los objetos son de la misma clase, pero diferentes subclases, ¿no fallan en tiempo de ejecución, en lugar de tiempo de compilación. Y no iba a conseguir un ClassCastException?
public boolean equals(Object o) {
if (o instanceof MyDate) {
MyDate temp = (MyDate) o;
if ((temp.day == day) && (temp.month == month) && (temp.year == year)) {
return true;
}
}
return false;
}