Читаем C#. Объектно ориентированное программирование полностью

класса указываем уже существующий класс, на основе которого мы созда-

ем новый класс. Делается такое указание с помощью небольшой добавки

к коду создаваемого класса. Класс, на основе которого создается новый

класс, называется базовым. Класс, который создается на основе базового

класса, называется производным классом.

ПРИМЕЧАНИЕ Иногда базовый класс называют суперклассом, а производный —

подклассом. Но эта терминология скорее относится к Java.

Для того чтобы создать новый класс на основе уже существующего, в опи-

сании нового (производного) класса после имени класса через двоеточие

указывается базовый класс. Другими словами, синтаксис создания произ-

водного класса такой:

class производный_класс: базовый_класс{

// код производного класса

}

В результате наследования вся «начинка» базового класса автоматически

переносится в производный класс. Другими словами, производный класс

в подарок от базового получает все поля и методы базового класса. Кроме

полученного наследства, производный класс может содержать описание

дополнительных членов. Более того, в производном классе только допол-

нительные члены и описываются.

Идиллию нарушают закрытые члены базового класса, то есть те члены

базового класса, которые описаны с атрибутом private или вообще без

идентификатора уровня доступа. Такие члены класса, по большому

счету, наследуются производным классом, но у него нет к ним доступа.

Другими словами, в программном коде производного класса нельзя

обратиться к private-члену базового класса. При этом непрямая ссылка

возможна. Например, в базовом классе есть закрытое поле и открытый

метод, который обращается к этому полю. В производном классе мы

можем вызвать открытый метод, но не можем обратиться к закрытому

полю. Вместе с тем этот самый открытый метод преспокойно обраща-

ется к закрытому полю. Вот такой парадокс (который, разумеется, на

самом деле парадоксом не является).

Помимо ключевых слов pubic и private, есть ключевое слово protected, которое используют для создания защищенных членов класса. Если

речь не идет о наследовании, то между закрытыми и защищенными

74

Глава 2. Классы и объекты

членами класса разницы нет — они доступны внутри класса и не-

доступны за его пределами. А вот при наследовании защищенные

члены класса проявляют свою хитрую сущность — они наследуются, становясь защищенными членами производного класса.

Также можно запретить использовать класс в качестве базового. Если

класс описать с атрибутом sealed, на основе такого класса произво-

дный класс создать не удастся.

В качестве базового класса можно использовать как свои собственные (на-

писанные собственноручно) классы, так и уже готовые, библиотечные.

Рассмотрим программный код, представленный в листинге 2.5.

Листинг 2.5.  Наследование классов

using System;

// Базовый класс:

class Box{

// Закрытое поле:

private int size;

// Закрытый метод для присваивания значения полю:

private void set(int size){

this.size=size;

}

// Защищенный метод для отображения

// консольного сообщения:

protected void show(){

string str="\nКоробка с размером ребра "+size+" см"; Console.WriteLine(str);

}

// Конструктор баз аргументов:

public Box():this(10){}

// Конструктор с одним аргументом:

public Box(int size){

// Присваиваем значение полю:

set(size);

}

}

// Производный класс от класса Box:

class ColoredBox:Box{

// Закрытое поле производного класса:

private string color;

// Закрытый метод для отображения значений полей:

private void showAll(){

// Отображаем "размер":

show();

// Отображаем "цвет":

Наследование и уровни доступа           75

Console.WriteLine("Цвет: "+color);

}

// Конструктор производного класса

// без аргументов:

public ColoredBox():base(){

color="красный";

// Отображаем сообщение:

showAll();

}

// Конструктор производного класса

// с одним аргументом:

public ColoredBox(int size):base(size){

color="желтый";

// Отображаем сообщение:

showAll();

}

// Конструктор производного класса

// с двумя аргументами:

public ColoredBox(int size,string color):base(size){

this.color=color;

// Отображаем сообщение:

showAll();

}

}

// Класс с главным методом:

class ExtDemo{

// Главный метод программы:

public static void Main(){

// Объектные переменные производного класса:

ColoredBox redBox,yellowBox,greenBox;

// Создание объектов производного класса:

redBox=new ColoredBox();

yellowBox=new ColoredBox(100);

greenBox=new ColoredBox(1000,"зеленый");

Console.ReadLine();

}

}

Идея очень простая: сначала создаем базовый класс (который называет-

ся Box), а затем на его основе производный класс (который называется

ColoredBox).

ПРИМЕЧАНИЕ В названиях классов сокрыт глубокий философский смысл. Класс

Box  как  бы  описывает  коробку  (кубическую,  у  которой  все  ребра

одинаковые), а класс ColoredBox как бы описывает раскрашенную

коробку. Без этих классов работа картонно-коробочной промышлен-

ности крайне затруднительна.

76

Глава 2. Классы и объекты

Нас, собственно, интересует производный класс ColoredBox. Но, чтобы по-

нять, что он из себя представляет, необходимо сначала разобраться с ба-

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных