Я читаю Руководство по сертификации Sybex Complete Java 2, апрель 2005 г. (ISBN0782144195). Эта книга для разработчиков Java, которые хотят пройти сертификацию Java.
После главы о модификаторах доступа (вместе с другими модификаторами) я нашел следующий вопрос (# 17):
Истина или ложь: если класс Y расширяется
класс X, два класса находятся в
различные пакеты, и класс X имеет
защищенный метод называется abby (), затем
любой экземпляр Y может вызывать abby ()
метод любого другого экземпляра Y.
Этот вопрос меня немного смутил.
Насколько я знаю, вы можете вызывать защищенный метод для любой переменной того же класса (или подклассов). Вы не можете вызывать его для переменных, которые выше в иерархии, чем вы (например, интерфейсы, которые вы реализуете).
Например, вы не можете клонировать какой-либо объект только потому, что вы его унаследовали.
Но вопросы ничего не говорят о типе переменной, только о типе экземпляра.
Я немного смутился и ответил "правда".
Ответ в книге
Ложные. Объект, который наследует защищенный метод от суперкласса в другом пакете, может вызывать этот метод сам по себе, но не в других экземплярах того же класса.
Здесь нет ничего о типе переменной, только о типе экземпляра.
Это очень странно, я не понимаю.
Кто-нибудь может объяснить, что здесь происходит?