super
не является выражением. Таким образом, super
не указывает на что-либо, и вы не можете использовать super
самостоятельно.
super.something()
это выражение, которое позволяет вызвать метод объекта, который this
указывает на, но поиск, реализация которых для вызова протекает вверх от суперкласса класса, код которого это находится, а не вверх от класс выполнения объекта, как если бы вы сделали this.something()
.
Здесь вызывается как toString()
, так и super.toString()
, на который указывает this
(что является экземпляром SuperChk
). Тем не менее, они вызывают разные реализации toString()
- в первом случае поиск основан на классе времени выполнения объекта, который равен SuperChk
, а SuperChk
действительно выполняет свою собственную реализацию toString()
, поэтому используется реализация SuperChk
. Во втором случае поиск основан на классе, который является суперклассом класса, в котором находится код (SuperChk
), который равен Object
, поэтому используется Object
toString()
.
Является ли getClass() вызовом класса, в котором метод toString() наследуется? – Alvin3001
@ Alvin3001 getClass() предоставит вам имя класса объекта из кучи. Даже если ваша ссылка относится к родительскому классу. –
Итак, здесь hashcode() также получает целочисленное значение адреса, указанного sc1? – Alvin3001