我看过一些书,也问过好多人,没人能给我一个满意的答案。 (300分)

  • 主题发起人 主题发起人 Rick.Qin
  • 开始时间 开始时间
别的不说,也说说"接口",次时代网友的理解有些误差,例子也是错误的.
接口可以理解为定义行为的类,它本身并不能实现功能,依靠派生类实现.
下面是我写着玩的一段代码,有接口声明,其实现接口的派生类的声明,可以参考一下
type
TGraphicType=(gtRectangle, gtCircle, gtLine);
IGraphic=interface(IInterface)
['{A1D2DED6-523D-45E9-A1EF-0F91B67C6FBE}']
procedure Draw(ACanvas:TCanvas);
function GetColor:TColor;
procedure SetColor(Value:TColor);
property Color:TColor read GetColor write SetColor;
end;

TCircle=class(TInterfacedObject, IGraphic)
private
FCenter:TPoint;
FRadius:Integer;
FColor: TColor;
function GetColor:TColor;
procedure SetColor(Value:TColor);
public
constructor Create(ACenter:TPoint;
ARadius:Integer);
destructor Destroy;override;
procedure Draw(ACanvas:TCanvas);
property Center:TPoint read FCenter write FCenter;
property Radius:Integer read FRadius write FRadius;
property Color:TColor read GetColor write SetColor;
end;

TRectangle=class(TInterfacedObject,IGraphic)
private
FLefttop:TPoint;
FRightbottom:TPoint;
FColor:TColor;
function GetColor:TColor;
procedure SetColor(Value:TColor);
public
constructor Create(ALefttop,ARightbottom:TPoint);
destructor Destroy;override;
procedure Draw(ACanvas:TCanvas);
property Lefttop:TPoint read FLefttop write FLefttop;
property Rightbottom:TPoint read FRightbottom write FRightbottom;
property Color:TColor read GetColor write SetColor;
end;

TLine=class(TInterfacedObject,IGraphic)
private
FStartPoint:TPoint;
FEndPoint:TPoint;
FColor:TColor;
function GetColor:TColor;
procedure SetColor(Value:TColor);
public
constructor Create(AStartPoint,AEndPoint:TPoint);
destructor Destroy;override;
procedure Draw(ACanvas:TCanvas);
property StartPoint:TPoint read FStartPoint write FStartPoint;
property EndPoint:TPoint read FEndPoint write FEndPoint;
property Color:TColor read GetColor write SetColor;
end;
 
晕,又是delphi。我不懂delphi,一点都不懂。我涉及编程工作才刚刚2周。
PS:我会为sunruijia加上100分。他解释了抽象类的概念。
 
多看看书吧
 
我花了135元买了两本书,都是翻译作品,看的我一头雾水。
我感觉renyi提供的那个JAVA2参考大全还不错呢。里面有详细的说明。
 
我不同意次时代关于接口的看法,他说的不是java的接口(interface)
 
对,我刚才也和同事们探讨了一下,我觉得JAVA的interface只是一个界面,只是一个类似通道的东西。就像是SQL里的filter一样。不过,我不知道是不是只有抽象类才能定义interface啊?要是那样的话,我为什么还要用interface去“集结”一个空的、没有实现的class呢?好像没有什么用处啊。
 
建议看《java与模式》这本书,里面有一章对接口的概念,接口与多继承的区别,为什么使用接口作了详细的说明,这本书的姊妹网站为:http://www.webEndsHere.com.
《java与模式》是每一个学习面向对象程序设计的程序员都应该读的书,强烈推荐!
 
多人接受答案了。
 
sunruijia:你的说法:interface是abstract class的说法欠妥当。abstract class可以通过其子类实现其方法,而interface中的方法在其继承interface中也不能实现,必须通过binding一个类实现,并且interface支持多重继承,而class不能。且interface中声明的方法其作用域必须为public
 
后退
顶部