我有一个抽象类:
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;
如果我能做到这一点,从面向对象设计的角度来看它会不会很好,我怎样才能从派生类中精确地访问这个成员呢?
答案 0 :(得分:8)
是的,你可以。抽象类是类,它们可以有实现。
通过将abstract关键字添加到类中,可以禁止实例化类。它不需要任何抽象方法。
可以实例化具有absract方法的类,但这会在编译时产生警告,并在调用方法时产生异常。
接口没有实现,它们必须由类实现(顺便说一下,它们可以是抽象的)。
答案 1 :(得分:7)
只是添加到Gamecat的答案,不仅可以,而且你应该把你的公共代码放在那里。