TBaseClass = class
public
property SomeProperty: TPropertyType read GetSomeProperty write SetSomeProperty;
end;
TMyClass = class(TBaseClass)
protected
property SomeProperty;
end;
Каким образом в Delphi класс реализует интерфейс?
Пробую реализовать нечто подобное на Delphi.
К примеру, описан следующий класс:
type
TMyClass = class(TInterfacedObject)
private
{ Private declarations }
public
procedure Method1();
procedure Method2();
end;
И следующий интерфейс:
type
IDataBase = interface
procedure Method1();
end;
Описываю еще один класс, родительским для которого является TMyClass:
type
TMyInterfacedChildrenClass = class(TMyClass, IDataBase)
private
{ Private declarations }
public
{ Public declarations }
end;
Однако что же выходит:
в разделе объявлений -
var ocTMyInterfacedChildrenClass :TMyInterfacedChildrenClass;
в разделе реализации -
ocTMyInterfacedChildrenClass := TMyInterfacedChildrenClass.Create();
ocTMyInterfacedChildrenClass.Method2();
и это не вызывает недовольства компилятора.
Следовательно, реализация интерфейса не ограничивает методы класса-родителя для наследника?
А как в Delphi принято поступать в случае, когда в родительском классе описаны методы и свойства совершенно не нужные в дочернем классе?
Цитата:
Originally posted by dominator
А как в Delphi принято поступать в случае, когда в родительском классе описаны методы и свойства совершенно не нужные в дочернем классе?
А как в Delphi принято поступать в случае, когда в родительском классе описаны методы и свойства совершенно не нужные в дочернем классе?
со свойствами всё просто:
Код:
А спрятать методы... Когда-то в подобной ситуации я просто переопределил виртуальный метод в protected секции.
Цитата:
Originally posted by dominator
Пробую реализовать нечто подобное на Delphi.
К примеру, описан следующий класс:
type
TMyClass = class(TInterfacedObject)
private
{ Private declarations }
public
procedure Method1();
procedure Method2();
end;
И следующий интерфейс:
type
IDataBase = interface
procedure Method1();
end;
Описываю еще один класс, родительским для которого является TMyClass:
type
TMyInterfacedChildrenClass = class(TMyClass, IDataBase)
private
{ Private declarations }
public
{ Public declarations }
end;
Однако что же выходит:
в разделе объявлений -
var ocTMyInterfacedChildrenClass :TMyInterfacedChildrenClass;
Пробую реализовать нечто подобное на Delphi.
К примеру, описан следующий класс:
type
TMyClass = class(TInterfacedObject)
private
{ Private declarations }
public
procedure Method1();
procedure Method2();
end;
И следующий интерфейс:
type
IDataBase = interface
procedure Method1();
end;
Описываю еще один класс, родительским для которого является TMyClass:
type
TMyInterfacedChildrenClass = class(TMyClass, IDataBase)
private
{ Private declarations }
public
{ Public declarations }
end;
Однако что же выходит:
в разделе объявлений -
var ocTMyInterfacedChildrenClass :TMyInterfacedChildrenClass;
Приведенный пример некорректен. Не буду еще раз объяснять прописные истины - перечитай еще раз про классы и интерфейсы в Дельфи, хотя бы в его справке. А для начала:
Код:
var
DBFace: IDataBase;
begin
DBFace.Method2; // вызывает исключение при компиляции
end;
DBFace: IDataBase;
begin
DBFace.Method2; // вызывает исключение при компиляции
end;