Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лаба №4. Наследование: расширение, спецификация, специализация, конструирование.Содержание книги
Поиск на нашем сайте Спецификация Расширение
Int fA()
Int fA()
Конструирование
c
c Void l()
Int fC()
Int fC()
Текст программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace lab4_1 { //спецификация
public interface A { void mA(); int fA(); }// классы в которых функции определяются но не реализуются // В интерфейсах нет реализации и нет полей, не прописаны алгоритмы функций а не параметров классов и поэтому нельзя создать объекты.
public class B: A { public B() { this.b = 1; this.b1 = 4; } ~B() { }
public void mA() { Console.WriteLine("метод mA интерфейса A"); } public int fA() { this.b += 1; Console.WriteLine(); return b; } public virtual int fB() { return 1; } public virtual void mB() { Console.WriteLine("метод mB класса B"); }
protected int b { get; set; } public int b1 { get; set; } }//конец спецификации // Наследование интерфейса и абстрактных функций
//расширение public class D: B { public D() { this.d1 = 1; this.d2 = 2; }
public override int fB()// замещение { Console.WriteLine("Method of abstract class B in class D."); return this.d1 * this.d2 + base.fB(); } ~D() { }
public int fD()// новый метод { Console.WriteLine("Method of D"); return this.d1 + this.d2; } public override void mB() { Console.WriteLine("метод mB класса D"); }
public int d1 { get; set; } public int d2 { get; set; } }//конец расширения
public abstract class C: A //абстрактный класс и у него есть конструктор но не можем создать объекты. Например: нельзя сделать так: C c = new C(); { public C() { this.c1 = 10; this.c2 = 20; } ~C() { } public void l() { Console.WriteLine(+50); } // операция, но лучше говорить метод (void) public void mA() { } public int fA() { return c1 + c2; } public abstract void mC(); public abstract int fC(); public virtual int pC() { return c1 * c2 + 5; }
protected int c1 { get; set; } protected int c2 { get; set; } }
public class E: C { public E() { this.e = 100; } ~E() { } public override void mC() { this.c1 = this.c1 + this.c2; } public override int fC() { Console.WriteLine("Function of E"); return c1 + e; } public override int pC() { Console.WriteLine("function pC classa E"); return c1 * c2 + 10; } //Переопределения фунцкии базового класса в подклассе (методы) или замещена
public int e { get; set; } }
public class J: C { public J() { this.j = 100; } ~J() { } public new void l() { Console.WriteLine(+25); }// с помощью new мы скрываем метод базового класса public override void mC() { this.c1 = this.c1 + this.c2; } public override int fC() { Console.WriteLine("Function of E"); return c1 + j; } protected virtual int pC() { Console.WriteLine("function pC classa F"); return 100; }
public int j { get; set; } }
public class K: J { public K() { this.k1 = 1; this.k2 = 2; this.k3 = 3; } ~K() { } public void mJ() { } public int fJ() { return k1 * k2 * k3; }
protected int k1 { get; set; } protected int k2 { get; set; } protected int k3 { get; set; } }
class Program { static void Main(string[] args) {
A a1 = new B();//создаём объект интерфейса A с помощью конструктора класса B A a2 = new D();
//спецификация Console.WriteLine("Спецификация:"); Console.WriteLine("interface A a1.fA() = {0}", a1.fA()); //Создаём объекты класса C с помощью конструкторов класса E и F Console.WriteLine(); Console.WriteLine("Специализация:");// C c1 = new E(); E e1 = new E(); c1.fC(); e1.fC(); Console.WriteLine(); //подстановка Console.WriteLine("Расширение:"); //Создаём объект класса B B b = new B(); Console.WriteLine("класс B функция b.fA = {0}", b.fA()); Console.WriteLine("класс B функция b.fB = {0}", b.fB()); Console.WriteLine("значение атрибута доступа b1 класса B = {0} ", b.b1); b.mB(); b = new D(); //расширение по функции // добавление новых методов в подкласс, а расширение по фунцкии - добавление новых алгоритмов Console.WriteLine("класс D функция b.fB = {0}", b.fB()); b.mB(); Console.WriteLine(); //конструирование // Это в другом классе создание одноимённой функции и она не является похожей на предыдущую // Это сокрытие фукнции базового класса и заменой её новой функцией в подклассе(наличие тех же параметров) Console.WriteLine("Конструирование:"); C c = new E(); c.l(); E e = new E(); e.l();
Console.WriteLine(); C j = new J(); Console.WriteLine("j={0}", j.pC());
Console.ReadKey(); } } } Результат работы программы:
Комбинирование.
Текст программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace lab4_2 { public interface C { void mA(); int fA(); }
public class B { public B() { this.speed = 33; } ~B() { } public int speed { get; set; } //расширение по функции public virtual int K() { Console.WriteLine(); return 1; } } //комбинирование public class A: B, C { public A() { this.size = 22; this.color = 1; } ~A() { } protected int size { set; get; } public int color { set; get; }
public void mA() { this.color = this.color * this.size; } public int fA() { return this.color = 55; }
public override int K() { return this.size = 22; }
} class Program { static void Main(string[] args) { C c = null;// пустая ссылка c = new A(); Console.WriteLine("a.fA = {0}", c.fA()); Console.WriteLine("method mA() of Interface A:"); c.mA(); Console.WriteLine("a.K() = {0}", ((B)c).K());// всё тоже самое как B c = new B() и вызов потом c.K() или по другому это преобразование типов Console.WriteLine(); A d = new A(); Console.WriteLine("d.K() = {0}", d.K()); Console.WriteLine("d.fA() = {0}", d.fA()); Console.ReadKey(); } } }
Вывод: Комбинирование позволяет объединить черты нескольких классов и интерфейсов в одном дочернем классе.В моей программе реализовано наследование от двух интерфейсов А и В и класса С. Происходит множественное наследование, причем для каждого суперкласса можно определить свой вариант наследования, но если в наследуемых классах есть одинаковые методы и/или переменные неоднозначность использования определяется указанием пространства имен класса, переменную или метод которого нужно использовать.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-07-18; просмотров: 312; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.006 с.) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||