Superclass

Superclass

Насле́дование — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом.

Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса [1].

Содержание

Типы наследования

Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).

В некоторых языках используются абстрактные классы. Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного. Например, абстрактным классом может быть базовый класс «сотрудник ВУЗа», от которого наследуются классы «аспирант», «профессор» и т. д. Так как производные классы имеют общие поля и функции (например, поле «год рождения»), то эти члены класса могут быть описаны в базовом классе. В программе создаются объекты на основе классов «аспирант», «профессор», но нет смысла создавать объект на основе класса «сотрудник вуза».

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Эйфель. Множественное наследование поддерживается в языке Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов. Практически всегда можно обойтись без использования данного механизма. Однако, если такая необходимость все-таки возникла, то, для разрешения конфликтов использования наследованных методов с одинаковыми именами, возможно, например, применить операцию расширения видимости — «::» — для вызова конкретного метода конкретного родителя.

Попытка решения проблемы наличия одинаковых имен методов в предках была предпринята в языке Эйфель, в котором при описании нового класса необходимо явно указывать импортируемые члены каждого из наследуемых классов и их именование в дочернем классе.

Большинство современных объектно-ориентированных языков программирования (C#, Delphi и др.) поддерживает возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним и тем же классом. Этот механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.


Наследование в языке C++

«Наследование» в C++:

class A{    //базовый класс
};
 
class B : public A{    //public наследование
}
 
class C : protected A{    //protected наследование
}
 
class Z : private A{    //private наследование
}

В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:

  • при public-наследовании все спецификаторы остаются без изменения.
  • при protected-наследовании все спецификаторы остаются без изменения, кроме спецификатора public, который меняется на спецификатор protected (то есть public-члены базового класса в потомках становятся protected).
  • при private-наследовании все спецификаторы меняются на private.

Одним из основных преимуществ public-наследования является то, что указатель на классы—наследники может быть неявно преобразован в указатель на базовый класс, то есть для примера выше можно написать:

A* a = new B;

Эта интересная особенность открывает возможность динамической идентификации типа (RTTI).

Наследование в языке Delphi

Для использования механизма наследования в class указать класс предок:

Предок:

TAncestor = class
  private
  protected
  public
    //Виртуальная процедура.
    procedure VirtualProcedure; virtual; abstract; 
    procedure StaticProcedure;
end;

Наследник:

TDescendant = class(TAncestor)
  private
  protected
  public
    //Перекрытие виртуальной процедуры.
    procedure VirtualProcedure; override;
    procedure StaticProcedure;
end;

Абсолютно все классы в TObject.

Наследование в языке Python

[2](англ. method resolution order).

class Ancestor1(object):   # Предок 1
    def m1(self): pass
class Ancestor2(object):   # Предок 2
    def m1(self): pass
class Descendant(Ancestor1, Ancestor2):   # Наследник
    def m2(self): pass
 
d = Descendant()           # инстанциация
print d.__class__.__mro__  # порядок разрешения метода:
(<class '__main__.Descendant'>, <class '__main__.Ancestor1'>, <class '__main__.Ancestor2'>, <type 'object'>)

С версии object. «Классические» классы будут поддерживаться вплоть до версии 2.6, но удалены из языка в Python версии 3.0.

Множественное наследование применяется в Питоне, в частности, для введения в основной класс классов-примесей (mix-in).

Примечания

  1. http://www.citforum.ru/database/articles/grigoriev/
  2. о порядке разрешения метода в Python

См. также

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Superclass" в других словарях:

  • Superclass — may be:* Superclass (book), A book about World governance by David Rothkopf * Superclass (biology), a taxonomic rank intermediate between subphylum and class. * Superclass (computer science), a class from which other classes are derived *… …   Wikipedia

  • superclass — [so͞o′pər klas΄, so͞o΄pərkläs΄] n. a natural subdivision that includes a group of related classes within a zoological phylum or a botanical division …   English World dictionary

  • superclass — 1. noun a) A taxon ranking below a phylum and above a class. b) A high level class that passes attributes and methods down the hierarchy to subclasses. 2. verb To create a superclass of …   Wiktionary

  • superclass — viršklasis statusas T sritis informatika apibrėžtis Objektiniame programavime – ↑klasė, iš kurios paveldėta kita klasė. Jeigu A klasė paveldėta iš B klasės, tai B klasė yra A klasės viršklasis. atitikmenys: angl. base class; superclass ryšiai:… …   Enciklopedinis kompiuterijos žodynas

  • Superclass (computer science) — In computer science, a superclass is a class from which other classes are derived. A superclass is also called a parent class . The classes that are derived from a superclass are known as child classes , derived classes , or subclasses. We can… …   Wikipedia

  • Superclass (book) — infobox Book name = Superclass orig title = translator = author = David Rothkopf cover artist = country = United States language = English series = classification = fiction genre = Politics, Globalization, Conspiracy publisher = Farrar, Straus… …   Wikipedia

  • Superclass (database theory) — In database design and database theory, class organization is stratified into class hierarchies which use inheritance. Class hierarchies consist of superclasses and subclasses, in which each subclass has a one to many isa relationship with its… …   Wikipedia

  • superclass Agnatha — noun superclass of eel shaped chordates lacking jaws and pelvic fins: lampreys; hagfishes; some extinct forms • Syn: ↑Agnatha • Hypernyms: ↑class • Member Holonyms: ↑Vertebrata, ↑subphylum Vertebrata, ↑ …   Useful english dictionary

  • superclass — noun Date: circa 1891 a category in biological classification ranking below a phylum or division and above a class …   New Collegiate Dictionary

  • superclass — n. [L. super, over; classis, a division] In classification, above the class and below the phylum …   Dictionary of invertebrate zoology


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»