class MyClass {
private String str;
public MyClass(String str){
this.str = str;
}
public int compare(Object o) {
return str.compareTo(((MyClass)o).str); //line No.8
}
}
class Client {
public static void main(String[] args) {
MyClass m = new MyClass("abc");
MyClass n = new MyClass("bcd");
System.out.println(m.compare(n));
}
}
Perché in questo frammento di codice del cast (MyClass)o
in linea numero 8 è necessario, nonostante il fatto che il client richiama un metodo compare
con argomenti che sono istanze della classe MyClass?Perché il cast è necessario in questo caso?
Quando ho modificare il metodo compare
in classe MyClass per formare come di seguito:
public int compare(Object o) {
System.out.println(o.getClass());
System.out.println(((MyClass)o).getClass());
return str.compareTo(((MyClass)o).str);
}
Poi, il Cliente produrrà il seguente risultato:
class MyClass
class MyClass
Così io non capisco il motivo per cui il il cast sopra è obbligatorio e perché non posso farlo in questo modo (senza cast in MyClass):
public int compare(Object o) {
return str.compareTo(o.str);
}
Perché quando lo faccio, ottengo l'errore di compilazione:
str cannot be resolved or is not a field