问题描述:TSaleOutDao即要继承抽象类TABizDao又要实现接口TIBizDao.
解决办法:先用抽象类继承TIBizDao,然后再把需要实现的接口方法声明为抽象方法。然后再用
TSaleOutDao继承TABizDao.
- //IBizDao.pas单元文件
- unit IBizDao;
- interface
- type
- TIBizDao=interface
- function aaa:string;
- end;
- implementation
- end.
- //ABizDao.pas单元文件
- unit ABizDao;
- interface
- uses
- IBizDao;//引用父类单元
- type
- {特别注意,同一个单元内的两个类会被任务是友元类,即如果把SaleOutDao也写在该单元中,
- SaleOutDao可以直接访问ABizDao中的私有变量TableName并赋值}
- TABizDao=class(TInterfacedObject,TIBizDao)
- private
- TableName:string;
- protected
- public
- constructor create;
- destructor destroy;override;
- procedure SetTableName;virtual;abstract;
- procedure SetTableNameEx(FName:string);
- function GetTableNameEx:string;
- {//虽然是继承自接口,但不实现接口的方法;aaa声明为抽象方法,在子类实现}
- function aaa: String;virtual;abstract;
- end;
- implementation
- { ABizDao }
- constructor TABizDao.create;
- begin
- Self.SetTableName;
- end;
- destructor TABizDao.destroy;
- begin
- inherited;
- end;
- function TABizDao.GetTableNameEx: string;
- begin
- Result:=TableName;
- end;
- procedure TABizDao.SetTableNameEx(FName: string);
- begin
- Self.TableName:=FName;
- end;
- end.
- //SaleOutDao.pas单元文件
- unit SaleOutDao;
- interface
- uses
- ABizDao,IBizDao;//引用父类单元
- type
- TSaleOutDao=class(TABizDao)
- private
- protected
- public
- constructor create;
- destructor destroy;override;
- procedure SetTableName;override;
- function aaa: String;override;
- end;
- implementation
- {实现接口的方法}
- function TSaleOutDao.aaa: String;
- begin
- Result:='aaa';
- end;
- constructor TSaleOutDao.create;
- begin
- inherited;{加上关键字inherited会调用父类构造函数,如果不加的话不会执行TABizDao.create}
- end;
- destructor TSaleOutDao.destroy;
- begin
- inherited;
- end;
- {实现抽象类的抽象方法}
- procedure TSaleOutDao.SetTableName;
- begin
- inherited;
- SetTableNameEx('UserInfo');
- end;
- end.