3. Постановка задачи. 4. Порядок выполнения работы. 5. Содержание отчета. Лабораторная работа № 3. Наследование, скрытие полей класса и виртуальные методы
3. Постановка задачи Создать объекты класса < имя класса> (класс и его поля задаются в соответствии с выбранным вариантом в лабораторной работе 1). Объекты должны быть созданы с помощью конструктора по умолчанию и перегруженного конструктора.
4. Порядок выполнения работы В главном меню системы программирования выберите команду File New Project или щелкните на соответствующей инструментальной кнопке. В окне New Project выберите пункт Console Application и щелкните на кнопке OK. В открывшемся окне в соответствии с вариантом задания напишите программу, использующую созданные вами объекты.
5. Содержание отчета 5. 1 Тема и цель работы. 5. 2 Текст программы. 5. 3 Результаты выполнения программы. Лабораторная работа № 3 Наследование, скрытие полей класса и виртуальные методы
1. Цель работы. Получение навыков в разработке программ с использованием классов образованных от других классов.
2. Общие сведения Важнейшая характеристика класса — возможность создания на его основе новых классов с наследованием всех его свойств и методов и добавлением собственных. Наследование позволяет создавать новые классы, повторно используя уже готовый исходный код и не тратя времени на его переписывание. Наследование — это отношение, связывающее классы, один из которых является базовым и называется родительским, а другой создается на его основе и называется наследником. Наследование заключается в том, что класс-наследник приобретает все свойства и методы родительского класс и добавляет к ним собственные. Например, описан класс queue1, наследующий описание класса queue:
using System; { class queue1: queue { } }
В ходе наследования новые классы наследуют поля и методы всех родительских классов, вышестоящих по иерархии наследования. Одни из этих полей и методов могут быть замены на собственные, другие могут представлять собой точные копии родительских. В класс-наследник автоматически включаются все поля наследуемого класса. Поля и другие элементы в классе-наследнике могут переопределяться (скрываться) другими элементами. Скрытие (переопределение) элементов класса — это явное описание в классе наследнике с новыми характеристиками уже существующих элементов из наследуемого класса. Следующий пример иллюстрирует переопределение в классе queue1, наследуемому от класса queue, полей q и arrchar с невидимых в видимые и присвоению им новых значений, а также введение в класс queue1 новой переменной r. using System; namespace Project3 { class queue { private int q=50; private char[] arrchar= new char[4] {'a', 'b', 'c', 'd'}; public int p; public char ch; } class queue1: queue { private int r = 50; public new int q=50; public new char[] arrchar= new char[4] {'e', 'f', 'g', 'h'}; public queue1() {} public queue1(int q, int i) { p = q*r; ch = arrchar[i]; } } class Executer { static void Main() { //В переменную a наследуемого класса записывают экземпляр класса-наследника: queue a = new queue1(500, 1); // Создание объекта b класса queue1 queue1 b = new queue1(50, 2); Console. WriteLine(a. p); Console. WriteLine(a. ch); Console. WriteLine(b. p); Console. WriteLine(b. ch); Console. ReadLine(); } } } В языке C#, в соответствии с принципами полиморфизма, поддерживается принцип совместимости объектов по цепочке наследуемых классов. Так экземпляр любого из нижестоящих по иерархии наследования классов может быть присвоен переменной, описанной как один из вышестоящих классов. C# также поддерживает и обратную возможность. Очень интересной возможностью классов, позволяющей родительскому классу обращаться к методам своих наследников, является виртуализация методов. Для этого замещаемый метод родителя объявляется с квалификатором virtual. Встретив это слово, компилятор создаст таблицу виртуальных методов, в которую поместит их названия и адреса точек входа. Класс-наследник объявляет замещающий метод с квалификатором override. На этапе выполнения программы при обращении любого родительского класса к замещенному в таблицу виртуальных методов помещается ссылка на соответствующий метод наследника, который и работает так, как если бы он изначально был частью родительского класса.
Следующий пример иллюстрирует данную возможность.
using System; namespace Project3a { class Roditel { public virtual string GetStr() {return " Родитель"; } public void Test() {Console. WriteLine(GetStr()); } } class Naslednik: Roditel { public override string GetStr() {return " Наследник"; } } class Executer { static void Main() { Roditel A = new Roditel(); Naslednik B = new Naslednik(); A. Test(); // Вывод: Родитель B. Test(); // Вывод: Наследник Console. ReadLine(); } } }
3. Постановка задачи Создать класс-наследник от класса < имя класса> (класс и его поля задаются в соответствии с выбранным вариантом в лабораторной работе 1). В классе-наследнике перекрыть некоторые поля класса-родителя и добавить дополнительное поле, связанное со свойствами предмета задания по варианту. При перекрывании полей использовать виртуальные методы. Создать объекты обоих полученных класса и занести в них данные. Организовать обращения родительских методов к замещающим их методам наследника.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|