Причина того, что приведение необходимо, состоит в том, что разработчик метода equals
хочет использовать поле класса Counter
, то есть поле count
.
, поскольку параметрother
передано методу типа Object
.Поэтому компилятор не знает, что это на самом деле объект Counter
.С помощью typecast вы сообщаете компилятору, что вы уверены, что объект на самом деле является Counter
экземпляром.
Затем компилятор позволяет вам использовать его определенные члены, такие как count
.
Всегда ли приведение типов является безопасным?
Обратите внимание, что приведение может обычно генерировать ClassCastException
во время выполнения, но поскольку сначала тип объекта проверяется оператором instanceof
, этогарантируется, что объект на самом деле является Counter
экземпляром, поэтому это безопасно делать.
Почему необходимо явное приведение?
Почему необходимо явное приведение типов, когда мы уже проверяем тип с помощьюinstanceof
?Причина, по которой это явное приведение необходимо, заключается в том, что instanceof
- это проверка времени выполнения .Приведение - это утверждение во время компиляции.
Но почему бы не просто boolean equals(Counter other)
?
Это потому, что тогда вы перегружаете метод Object равным, а не переопределяете.