Высокоуровневые методы информатики и программирования. Тузовский А.Ф. - 93 стр.

UptoLike

Составители: 

93
Console.WriteLine(
"*** Вызов методов класса B через ссылку типа A");
// ссылка базового типа = объект произв. класса
a = b; // разрешенная операция
a.MethodA();
//a.MethodB(); //ошибка в классе A нет MethodB
a.MethodC(3);
}
}
Результатом работы данной программы будет:
*** Вызов методов объекта A
метод MethodA класса A
метод MethodC класса A
*** Вызов методов класса B через ссылку типа B
перегруж. MethodA класса B
скрытый MethodA класса B;
новый MethodB класса B
замещен. MethodC класса B
*** Вызов методов класса B через ссылку типа A
метод MethodA класса A
замещен. MethodC класса B
Из примера видно, что скрытые и замещенные методы ведут себя
по-разному в тех случаях, когда переменной базового типа присваивает-
ся ссылка на объект производного класса примере: a = b;). В ре-
зультате этого тип ссылки (A) отличается от типа объекта, на который
она указывает. При использовании такой переменной можно вызывать
для объекта только методы базового класса и замещенные методы про-
изводного класса, но нельзя вызвать скрытые и новые методы произ-
водного класса.
5.3. Абстрактные классы
С наследованием тесно связан еще один важный способ проекти-
рования семейства классов абстрактные классы. Метод класса назы-
вается абстрактным, если при определении метода задана его сигна-
тура, но не задана реализация метода, а класс называется абстракт-
ным, если он имеет, хотя бы один, абстрактный метод. Объявление
абстрактных методов и абстрактных классов должно сопровождаться
модификатором abstract. Поскольку абстрактные классы не являют-
ся полностью определенными классами, то нельзя создавать объекты
абстрактных классов. Абстрактные классы могут иметь потомков,
частично или полностью реализующих абстрактные методы роди-
тельского класса. Абстрактный метод чаще всего рассматривается как