Delphi 我可以在抽象基类中保存任何数据成员吗?
我有一个抽象类:Delphi 我可以在抽象基类中保存任何数据成员吗?,delphi,oop,inheritance,Delphi,Oop,Inheritance,我有一个抽象类: type TInterfaceMethod = class abstract public destructor Destroy; virtual; abstract; function GetBasePlan: Word; virtual; abstract; procedure CountBasePlan; virtual; abstract; procedure Calculate; virtua
type
TInterfaceMethod = class abstract
public
destructor Destroy; virtual; abstract;
function GetBasePlan: Word; virtual; abstract;
procedure CountBasePlan; virtual; abstract;
procedure Calculate; virtual; abstract;
procedure PrepareForWork; virtual; abstract;
end;
和派生类:
type
TFogelMethod = class(TInterfaceMethod)
private
matrix: TFogelMatrix;
BasePlan: Word;
public
constructor Create(var matr: TFogelMatrix);
procedure Calculate;
function GetBasePlan: Word;
procedure CountBasePlan;
procedure PrepareForWork;
destructor Destroy;
end;
问题是,我是否可以将GetBasePlan和CountBasePlan方法的实现放在基类中,使它们只是虚拟的,而不是像现在这样抽象,并将成员BasePlan放在那里?那么,我可以这样做吗:
type
TInterfaceMethod = class abstract
private
BasePlan: Word;
public
destructor Destroy; virtual; abstract;
function GetBasePlan: Word; virtual;
procedure CountBasePlan; virtual;
procedure Calculate; virtual; abstract;
procedure PrepareForWork; virtual; abstract;
end;
如果我能做到这一点,从面向对象设计的角度来看,这是否很好?我如何才能从派生类中准确地访问此成员?是的,您可以。抽象类是类,它们可以有实现 通过向类添加abstract关键字,可以禁止实例化该类。它不需要任何抽象方法 可以实例化具有absract方法的类,但这会在编译时导致警告,如果调用该方法,则会导致异常
接口没有实现,它们必须由类实现(顺便说一句,类可以是抽象的)。为了补充Gamecat的答案,不仅可以,而且应该将您的通用代码放在那里。如何从派生类访问基类私有成员?(上图)找到了方法-我只需要将基类私有成员声明为受保护:)您可以访问在同一单元中定义的类的私有成员。为了避免这种情况,请使用严格私有(和严格保护)的Chester,这就是受保护说明符的具体用途,以便派生类可以使用它们,事实上,这有点意味着您希望派生类使用受保护的实例数据。事实上,应该始终避免使用Destroy,因为它在ToObject中是虚拟的。毁灭者毁灭;推翻