Здесь, в строках 1 и 2, вам необходимо понять, как работает динамический полиморфизм и последовательность вызова конструкторов.
Поскольку интерфейс Worker
реализован классом A
и классом A
наследуется классом B
и классом C
, поэтому можно создавать объекты класса B
и класса C
со ссылкой на интерфейс Worker
.Итак, когда будут созданы объекты класса B
или класса C
, в первую очередь будет вызван конструктор родительского класса A
, затем произойдет выполнение конструктора дочернего класса
. Поэтомув строке # 1 вывод будет:
New guy!
This is B reporting
, а в строке # 2 вывод будет:
New guy!
It's C here!
Теперь в строке 3 и 4 вам нужно понять, какиеобъект, который вы передаете в качестве аргумента в методе сотрудничество и с каким объектом вы его вызываете.
В строке # 3 метод collaboration
вызывается объектом класса C
с объектом класса B
в качестве параметра.Следовательно, метод collaboration
класса C
будет вызван.Но поскольку вы передаете объект класса B
в качестве параметра, дальнейшие вызовы будут выполняться в соответствии с поведением класса B
.
Теперь метод collaboration
в классе C
имеет оператор print, а затемон передает аргумент collaboration
родительского класса (то есть класса A
).В вашем случае объект класса B
будет передан методу collaboration
в классе A
.Так, в методе collaboration
класса A
вызывается метод snooze
объекта работника (в данном случае это будет класс B
), теперь элемент управления перейдет к методу snooze
класса B
и дальнейшее исполнение там произойдет.В snooze
методе класса B
имеется оператор print и происходит вызов родительского класса (который является классом A
) snooze
.Таким образом, выходные данные в строке # 3 будут:
Try to work together...
Watch out for the boss!
Zzzz
В строке # 4 метод collaboration
вызывается объектом класса B
с объектом класса C
в качестве параметра.Поскольку класс B
не имеет собственной реализации метода collaboration
, поэтому будет вызван метод collaboration
родительского класса (то есть класса A
).В collaboration
методе класса A
, snooze
вызывается метод аргумента (который является объектом класса C
), поэтому вывод:
Do this till 5pm.
В строке # 5,вывод прост:
Who gets fired?
Ответ довольно наглядный, пожалуйста, внимательно прочитайте ответ ...