Статические поля и методы класса

У класса могут быть поля, связанные не с объектами, а с самим классом. Эти поляобъявляются как статические с модификатором static. Статические поля доступны всем методам класса. Независимо от того, какой объект вызвал метод, используются одни и те же статические поля, позволяя методу использовать информацию, созданную другими объектами класса.

Аналогично полям, у класса могут быть и статические методы, объявленные с модификатором static. Такие методы не используют информацию о свойствах конкретных объектов класса - они обрабатывают общую для класса информацию, хранящуюся в его статических полях.

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

Повторное использование кода - это одна из главных целей ООП. Класс- потомок наследует все возможности родительского класса - все поля и все методы, открытую и закрытую часть класса. Правда, поля и методы родительского класса, снабженные атрибутом private, хотя и наследуются, но по-прежнему остаются закрытыми, и методы, создаваемые потомком, не могут к ним обращаться напрямую, а только через методы, наследованные от родителя. Единственное, что не наследует потомок - это конструкторы родительского класса. Конструкторы потомок должен создавать сам.

В C# разрешено только одиночное наследование, то есть у класса-потомка может быть только один родительский класс.

Рассмотрим класс, названный Found, играющий роль родительского класса. У него есть обычные поля, конструкторы и методы:

 

// Программа 4. Родительский класс Found

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());

}

public override string ToString() { //переопределенный метод базового класса Object

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();

}

}

 

Класс Found переопределил родительский метод класса Object ToString(), задав собственную реализацию возвращаемой методом строки, которая связывается с объектами класса. Как часто делается, в этой строке отображаются значения полей объекта данного класса. На переопределение родительского метода ToString() указывает модификатор метода override.

Класс Found закрыл свои поля для клиентов, но открыл для потомков, снабдив их модификатором доступа protected.

Создадим теперь класс Derived - потомка класса Found. Что же может делать потомок? Прежде всего, он может добавить новые свойства - поля класса. Заметьте, потомок не может ни отменить, ни изменить модификаторы или типы полей, наследованных от родителя - он может только добавить собственные поля.

  1. Модифицируем наш класс Derived. Пусть он добавляет новое поле класса, закрытое для клиентов этого класса, но открытое для его потомков. protected int debet;
  2. Конструкторы родителей и потомков

Каждый класс должен позаботиться о создании собственных конструкторов. Он не может в этом вопросе полагаться на родителя, поскольку, как правило, добавляет собственные поля, о которых родитель ничего не может знать. Конечно, если не задать конструкторов класса, то будет добавлен конструктор по умолчанию, инициализирующий все поля значениями по умолчанию. Но это редкая ситуация. Чаще всего, класс создает собственные конструкторы и, как правило, не один, задавая разные варианты инициализации полей.

public Derived(String^ name, int cred, int deb): Found (name,cred){}

 

Вызов конструктора родителя происходит не в теле конструктора, а в заголовке, пока еще не создан объект класса.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: