Предполагая, что у меня есть эти два класса, в отдельных файлах:Понимание Java компилятор
public class Text
{
public String _word;
public Text(String w)
{
_word = w;
}
public String getWord()
{
return _word;
}
public boolean equals (Text other)
{
return ((other!=null)&&(_word.equals(other._word)));
}
public boolean test (Text other)
{
return 1==1;
}
}
второго класса:
public class Sentence
{
public String _word;
public Sentence(String w)
{
_word = w;
}
public String getWord()
{
return _word;
}
public boolean equals (Object other)
{
return ((other!=null) && (other instanceof Sentence)
&& (_word.equals(((Sentence) other)._word)));
}
}
И следующие основные:
public static void main(String[]args){
Text y1 = new Text("abc");
Sentence z1 = new Sentence ("abc");
**
}
Скажем, я бегу следующая команда, где **:
System.out.println (y1.equals(z1));
Все в порядке, и оно выводит «ложь».
Но, если я запускаю эту команду:
System.out.println (y1.test(z1));
Компилятор орет «Приговор не может быть преобразован в текст».
Два вопроса:
- Почему это работает на равных, но не для теста? y1 - это текст, поэтому вызов
y1.equlas()
вызываетequlas()
внутри текста, и там он получает только текст как параметр. - Если это работает, почему вывод ложный? оба «_word» установлены на «abc».
Спасибо!
Поместите эту строку в свой метод 'Word.equals'' System.out.println («Word equals called»); 'и затем запустите тест. Посмотрите, что произойдет. –