Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# - все презентации / 05_C#_Отношения между класами. Нследование. Полиморфизм.ppt
Скачиваний:
58
Добавлен:
29.03.2015
Размер:
237.06 Кб
Скачать

С#. Отношения между классами. Наследование. Полиморфизм

05. C#. Наследование. Полиморфизм

План лекции

«Клиент-поставщик» и «клиент-наследник»

Принцип наследования

Статический контроль типов и динамическое связывание

Механизмы реализации полиморфизма

Абстрактные классы

05. C#. Наследование. Полиморфизм

2

Отношения между классами

Определение 1. Классы А и В находятся в отношении " клиент- поставщик ", если одним из полей класса В является объект класса А. Класс А называется поставщиком класса В, класс В называется клиентом класса А.

Определение 2. Классы А и В находятся в отношении " родитель - наследник ", если при объявлении класса В класс А указан в качестве родительского класса. Класс А называется родителем класса В, класс В называется наследником класса А.

05. C#. Наследование. Полиморфизм

3

Отношения «является» и «имеет»

public class ClassA

{

public ClassA(string f1, int f2)

{

fieldA1 = f1; fieldA2 = f2;

}

public string fieldA1; public int fieldA2; public void MethodA()

{

Console.WriteLine( "Это класс A"); Console.WriteLine ("поле1 = {0}, поле2 = {1}", fieldA1, fieldA2);

}

public static void StatMethodA()

{

string s1 = "Статический метод класса А"; string s2 = "Помните: 2*2 = 4"; Console.WriteLine(s1 + " ***** " + s2);

}

}

05. C#. Наследование. Полиморфизм

4

Отношения «является» и «имеет»

public class ClassB

{

public ClassB(string f1A, int f2A, string f1B, int f2B)

{

inner = new ClassA(f1A, f2A); fieldB1 = f1B; fieldB2 = f2B;

}

ClassA inner;

public string fieldB1; public int fieldB2; public void MethodB1()

{

inner.MethodA(); Console.WriteLine( "Это класс B");

Console.WriteLine ("поле1 = {0}, поле2 = {1}", fieldB1, fieldB2);

}

}

05. C#. Наследование. Полиморфизм

5

Клиент класса

public void MethodB2()

{

ClassA loc = new ClassA("локальный объект А",77); loc.MethodA();

}

public void MethodB3()

{

ClassA.StatMethodA();

}

Определение 3. Класс B называется клиентом класса A, если в классе B создаются объекты класса A - поля или локальные переменные - или вызываются статические поля или методы класса A.

05. C#. Наследование. Полиморфизм

6

Отношения между клиентами и поставщиками

public void TestClientSupplier()

{

ClassB objB = new ClassB("AA",22, "BB",33); objB.MethodB1();

objB.MethodB2();

objB.MethodB3();

}

05. C#. Наследование. Полиморфизм

7

Наследование

public class Found

{

//поля

protected string name; protected int credit; public Found()

{

}

public Found(string name, int sum)

{

this.name = name; credit = sum;

}

public virtual void VirtMethod()

{

Console.WriteLine ("Отец: " + this.ToString() );

}

05. C#. Наследование. Полиморфизм

8

Наследование

public override string ToString()

{

return(String.Format("поля: name = {0}, credit = {1}", name, credit));

}

public void NonVirtMethod()

{

Console.WriteLine ("Мать: " + this.ToString() );

}

public void Analysis()

{

Console.WriteLine ("Простой анализ");

}

public void Work()

{

VirtMethod();

NonVirtMethod();

Analysis();

}

}

05. C#. Наследование. Полиморфизм

9

Наследование

public class Derived:Found

{

}

public void TestFoundDerived()

{

Found bs = new Found ("father", 777); Console.WriteLine("Объект bs вызывает методы базового класса"); bs.VirtMethod();

bs.NonVirtMethod();

bs.Analysis();

bs.Work();

Derived der = new Derived();

Console.WriteLine("Объект der вызывает методы класса родителя"); der.VirtMethod();

der.NonVirtMethod();

der.Analysis();

der.Work();

}

05. C#. Наследование. Полиморфизм

10

Объект потомка вызывает поля и методы родителя

05. C#. Наследование. Полиморфизм

11