
Урок #20 – Виртуальные методы
Видеоурок
Полиморфизм является одной из концепций объектно ориентированного программирования. Благодаря полиморфизму мы можем переопределять методы родительского класса в классах наследниках.
Зачем нужен полиморфизм?
Предположим что у нас есть один большой класс «Транспорт». В нём прописаны методы:
- вывод всей информации;
- установка полей класса;
- запуск двигателя (на данный момент выводит лишь текст про запуск двигателя).
На основе класса мы создаем два класса наследника: «Car» и «Airplane». В каждом из классов-наследников мы будем иметь доступ ко всем методам из класса «Транспорт».
Мы явно понимаем, что метод «запуск двигателя» должен иметь разную реализацию у двух классов. Как мы можем заменить методы:
- Можем создать в каждом классе новые методы, что будут релевантны конкретному классу. Из минусов то, что каждый метод будет иметь новое название и нам сложно будет запомнить все названия методов для всех классов;
- Можем создать переопределение методов. Для этого необходимо прописать такое же имя как в главном классе и далее прописать новое содержимое для метода. Получается явный плюс, так как теперь повсюду используется одно имя и в зависимости от разных классов будет вызываться разный метод, но под одним и тем же именем.
В ООП вы можете переопределять неограниченное количество методов и указывать для них новые свойства и действия.
Реализация программы
Пример реализации виртуальных методов приведен ниже:
using System;
namespace ProjectOne {
class Shape {
public virtual void saysSomething () {
Console.Write("No! ");
}
}
class Square : Shape {
public override void saysSomething () {
base.saysSomething ();
Console.Write("But I will say something!");
}
}
class MainClass {
public static void Main(String[] args) {
Square test = new Square();
test.saysSomething (); // Будет выведено - "No! But I will say something!"
}
}
}
Для создания подобных методов необходимо прописать в главном классе ключевое слово virtual
перед типом данных, а в классах наследнике слово override
.
Исходный код
using System;
namespace project {
class Program {
static void Main() {
Robot bot = new Robot("Bot", 800, new byte[] {0, 0, 0});
bot.printValues();
Killer killer = new Killer("Killer", 1000, new byte[] {0, 0, 10}, 100);
killer.printValues();
killer.Lazer();
Robot bot1 = new Robot("Bot");
bot1.Weight = -100;
}
}
}
Посмотреть остальной код можно после подписки на проект!
Задание к уроку
Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям
Большое задание по курсу
Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца
Также стоит посмотреть