![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что такое абстрактный класс ?
DrAlban © (2002-09-18 20:49:00)Или абстрактный метод ? Точно уж не помню, кто-то говорил - забыл. В общем, после его объявления идет слово abstract
Юрий Зотов (2002-09-18 21:44:00) [1]> Какой же смысл создавать от него объект?
Иногда смысл есть - если точно известно, что неперекрытый абстрактный метод никогда и никем не будет вызван. Используется, например, в экспертах IDE, чтобы не плодить лишний код.
ATR (2002-09-18 21:41:00) [2]2Song
Запросто. Создать-то можно. А вот использовать конечно не получиться.
Kibitzer (2002-09-18 21:33:00) [3]От абстрактного класса можносоздать объект. Но при вызове любого абстрактного метода, стопудово получите сообщение: Abstract error. Какой же смысл создавать от него объект?
Kibitzer (2002-09-18 21:28:00) [4]Да. Самый яркий пример абстрактого класса (по моему :)) - класс
TStrings, от которого произошли его многочисленные потомки:TStringList,TMemoStrings,TListBoxStrings,TStringGridStrings,TTabStrings,...
Блягодаря этому я могу сказать, например:ListBox1.Items := Memo1.Lines(так как и свойствоItemsуTListBox, и свойствоLinesуTMemoобъявлены какTStrings)
Song (2002-09-18 21:26:00) [5]2ATR (18.09.02 21:20)
Ну попробуйте например выполнить такой код хотя бы: TStrings.Create.. посмотрю я на Ваше "можно"
Song (2002-09-18 21:20:00) [6]Нет.
ATR (2002-09-18 21:20:00) [7]Можно, но вот только зачем это надо.
DrAlban (2002-09-18 21:16:00) [8]То есть экземпляр абстрактного класа создать нельзя ?
Kibitzer (2002-09-18 21:13:00) [9]Абстрактный метод - это метод который объявлен в классе, но не реализован (в разделе
implementation). Абстрактный метод должен быть обязательно либоvirtual, либоdynamic(чтобы потомки могли его реализовать).
А абстрактный класс - это класс у которого есть абстрактные методы. По идее от абстрактного класса объектов не создают, а служит он, как скелет для создания многочисленных потомков.
ATR (2002-09-18 21:05:00) [10]Методы которые определены в классе, но не содержат никаких действий и обязательно должны быть переопределены в потомках класса. Пример:
TMyClass = class(TComponent)
protected
procedure MyProc; virtual; abstract;
end;
TMyNewClass = class(TMyClass)
protected
procedure MyProc; override;
end;
.....
{ TMyNewClass }
procedure MyProc;
begin
....
end;