我有一个抽象类:
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的答案,不仅可以,而且你应该将你的公共代码放在那里.