Java newb ie здесь, у меня есть базовый c вопрос, на который наполовину отвечают предыдущие ответы в других темах или документах, но я все еще не до конца понимаю механизм и хочу быть уверенным Я рассматриваю основные принципы (код внизу, вопросы посередине).
По сути, я переопределяю метод equals (), чтобы проверить, имеют ли два объекта MyDate одинаковую дату. Я делаю экземпляр проверки, является ли объект o объектом MyDate, затем вы вводите объект temp специально для объекта MyDate o
, а затем сравниваете даты. Почему вы вводите переменную temp в класс MyDate o, если он уже принадлежит классу MyDate?
- Используете ли вы переменную temp в качестве более простой ссылки на объект, который вы хотите запустить сравнение equals ()? Поскольку вы используете equals () для сравнения
MyDate.equals(MyOtherDate)
, в коде, если я не назначу переменную для хранения ссылки, вы получите различные ошибки (temp не может быть разрешена как переменная, несоответствие типов, et c в основном компилятор не уверен, где искать, если вы не напишите больше кода).
2a. Некоторые из других потоков говорили что-то о том, что, хотя instanceof проверяет, является ли экземпляр классом, он проверяет класс base , но не проверяет подкласс. Вы выполняете приведение типов, потому что вы специально указываете компилятору проверять указанный объект c (приведение типа из общего объекта к указанному c объекту). ПРИМЕЧАНИЕ. Это может быть вопрос типа c с указанием версии и разновидности, я видел разные ответы на похожие вопросы.
2b. Приведение изменяет ссылку, а не сам объект. Таким образом, если объекты принадлежат к одному и тому же классу, но к разным подклассам, произойдет сбой во время выполнения, а не во время компиляции. И не получу ли я 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;
}