Чи знаєте ви ООП?

7

Програмування Asp.net
Попередній

Наступний

На співбесідах я не коли не вимагаю глибокого знання теорії. Наприклад, відповідай мені, що таке клієнт-серверний додаток? Якщо людина чітко не може дати відповідь на це питання, то це не означає що він програміст. Такі питання не дають ніякого результату. Я люблю питати за кодом, і питання завжди один, що в програмі відбувається?

Це приклад з допомогою якого можна перевірити на знання спадкування, що буде выведенно на екран:

Цей приклад показує, що спадкування дуже небезпечна штука. Програміст працює з об’єктом Animal, а вести він себе може по різному. Розглянемо оголошення класу Fish. Перший і останній метод оголошені однаково, тобто якщо назва методу збігаються з назвою класу-батька, то за замовчуванням метод буде сприйматися як new. Так діє перший метод, слово new там пропущено, але воно там є. Другий метод замінює метод класу-батька.

А тепер, як же діють програма в цьому випадку. Коли вона бачить метод об’єкта, то вона намагається викликати останню реалізацію цього методу, а слово new означає, як стоп – далі не шукай, скористайся останніми знайденим методом. Коли ми викликаємо objFish.Breathe(), то програма спочатку знаходить метод класу Animal, далі шукає наступну реалізацію цього методу. Переходить до методу класу Fish (про цей клас об’єкт знає, тому що був створений його конструктором), але цей метод оголошений як new (приховано оголошено) – це означає СТОП, повернися назад. Ось тоді буде виведений Animal::Breathe. Другий метод оголошений як override, що перевизначає метод, значить цей метод є останнім варіантом, більше програма методів не знаходить, і виводить Fish::Eat. Третій метод діє так як перший.

Відповідь:

Animal::Breathe

Fish::Eat

Animal::Sleep