|
Programmer ASP.NET MVC C# |
Programming
|
||
Предыдущий | Следующий | |
На собеседованиях я не когда не требую глубокого знания теории. Например, ответь мне что такое клиент-серверное приложение? Если человек четко не может дать ответ на этот вопрос, то это не означает что он не программист. Такие вопросы ни дают никакого результата. Я люблю спрашивать по коду, и вопрос всегда один, что в программе происходит? Это пример с помощью которого человека можно проверить на знания наследования, что будет выведенно на экран: Этот пример показывает, что наследование очень опасная штука. Программист работает с объектом Animal, а вести он себя может по разному. Рассмотрим объявление класса Fish. Первый и последний метод объявлены одинаково, т.е. если название метода совпадают с названием класса-отца, то по умолчанию метод будет восприниматься как new. Так действует первый метод, слово new там пропущено, но оно там есть. Второй же метод, переопределяет метод с класса-отца.
А теперь, как же действуют программа в этом случае. Когда она видит метод объекта, то она пытается вызвать последнею реализацию этого метода, а слово new означает, как стоп - дальше не ищи, воспользуйся последним найденным методом. Когда мы вызываем objFish.Breathe(), то программа сначала находит метод класса Animal, дальше ищет следующею реализацию этого метода. Переходит к методу класса Fish (про этот класс объект знает, потому что был создан его конструктором), но этот метод объявлен как new (скрыто объявлен) - это означает СТОП, вернись назад. Вот тогда будет выведен Animal::Breathe. Второй метод объявлен как override, что переопределяет метод, значит этот метод является последним вариантом, больше программа методов не находит, и выводит Fish::Eat. Третий метод действует так как первый. Ответ: Animal::Breathe Fish::Eat Animal::Sleep
|