Upcast: Доступ к методам базового класса с различными модификаторами доступа из производного класса после Upcast? Здраствуйте. Не знаю, как код вставить, но вот вопрос на примере: Есть базовый класс с допустим методами: class X {... поля/свойства... public int Aaa(); protected int Bbb(); private int Ccc(); ...} И есть дочерний класс в котором произведён upcast (также пару методов для примера) : class Y : X {... поля/свойства... public string Sss(); protected string Www(); private string Ttt(); ... Y петя = new Y(); X мужчина = петя; // upcast } Вопросы: 1. Теряет ли петя, ставший мужчиной, все свои методы Sss, Www, Ttt? (даже public Sss?) 2. К каким методам родительского класса имеет петя, ставший мужчиной, доступ? Т.е. что разрешено: мужчина.Ааа()? мужчина.Bbb()? мужчина.Ccc()? (здесь особенно интересует protected Bbb, т.к. мужчина.Bbb() у меня выдает ошибку) Спасибо.
Петя, ставший объектом типа X (мужчиной) после upcast не теряет свои методы Sss, Www, Ttt. Он все еще является объектом класса Y, но рассматривается как объект X.
После upcast к объекту типа X (мужчина) можно обращаться только к методам с публичным доступом (public) из базового класса. То есть объект X (мужчина) имеет доступ к методу Aaa(), но не имеет доступа к методам Bbb() и Ccc(), так как они имеют защищенный (protected) и закрытый (private) доступ соответственно.
Таким образом, мужчина.Aaa() будет доступен, а мужчина.Bbb() и мужчина.Ccc() вызовут ошибку компиляции.
Петя, ставший объектом типа X (мужчиной) после upcast не теряет свои методы Sss, Www, Ttt. Он все еще является объектом класса Y, но рассматривается как объект X.
После upcast к объекту типа X (мужчина) можно обращаться только к методам с публичным доступом (public) из базового класса. То есть объект X (мужчина) имеет доступ к методу Aaa(), но не имеет доступа к методам Bbb() и Ccc(), так как они имеют защищенный (protected) и закрытый (private) доступ соответственно.
Таким образом, мужчина.Aaa() будет доступен, а мужчина.Bbb() и мужчина.Ccc() вызовут ошибку компиляции.