- •План лекции
- •Отношения между классами
- •Отношения «является» и «имеет»
- •Отношения «является» и «имеет»
- •Клиент класса
- •Отношения между клиентами и поставщиками
- •Наследование
- •Наследование
- •Наследование
- •Объект потомка вызывает поля и методы родителя
- •Наследование. Примеры
- •Добавление методов и изменение методов родителя
- •Статический контроль типов и динамическое связывание
- •Механизмы обеспечения полиморфизма
- •Механизмы обеспечения полиморфизма
- •Полиморфизм. Пример
- •Полиморфизм. Пример
- •Абстрактные классы
- •Абстрактные классы
- •Абстрактные классы
- •Абстрактные классы
- •Пример работы со стеком
- •Вопросы
С#. Отношения между классами. Наследование. Полиморфизм
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 |