|
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象程序设计提供的多重抽象化。接口可能也提供某种意义上的在讲不同语言的实体之间的翻译,诸如人类与电脑之间。因为接口是一种间接手段,所以相比起直接沟通,会引致些额外负担。人类与电脑等信息机器或人类与程序之间的接口称为用户界面。电脑等信息机器硬件组件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。. m3 \, n% D; v7 b7 _
% `! y$ W# W/ }7 a" K6 j S
0 q# m+ b- o. G. q' H( ^
% W& q7 Q8 Y! N基本解释
8 m& ~1 o, R: ]. E* ~
& `. N N, s$ w G* C( d◎接口jiēkǒu0 V$ w3 C9 q' {! P. h+ \/ v
$ y) c6 z6 W" P6 O& {. w8 @(1) [take up sb.'s remark]∶接着别人的话[说]
4 d. v5 d% W2 [( O/ e, e% N6 C3 }5 h. }. T& s d' P
妈妈的话一落音,她就接口谈了起来
) p# F! `5 u: s& m) U3 P' A2 {( ^- B4 d- O( M
(2) [interface;joint]∶两个物体的口子相连接
/ Z! k5 w( R4 ^& K N1 m% U; c) t; e
这里正是新沟跟旧沟的接口的地方
2 I! W/ [6 g$ E+ P' z* u1 s, ]) w v
◎接口jiēkǒu
: ^" i, Y/ m0 m- @: I! V" e
! H! ]3 [% S& l' r8 D1 |(1) [interface]∶两个不同系统(或子程序)交接并通过它彼此作用的部分0 ` \0 Q2 `5 i8 [. U% b0 U
( P4 B# {+ }9 `( F0 l) s0 `(2) [joggle]∶稍带台阶形的形成金属平板的壁阶(如为了提供法兰盘)
- n n+ K6 t( [4 ?3 G% w# s8 J2 X7 X/ E. n, j! w. A
引证解释4 T: s# F. v+ |0 z7 v
9 R8 q7 l! g1 H% t2 z
1.紧接着别人的话题说话。《二刻拍案惊奇》卷四:“一日酒酣, 史应 便伸伸腰道:‘……我们遇得好兄弟,到此一番,尽兴一番。’ 魏能 接口道:‘ 纪二哥 待我们弟兄只好这等了。’”《儿女英雄传》第四回:“ 张三 手里拿着鐝头看了一眼,接口说:‘怎么马仰人翻呢?’” 茅盾 《子夜》十四:“ 王金贞 也接口说,眼却看着 莫干丞 。” ?! z' t0 _- [' M
% v+ `* n& t- z
2.交接处。 郁达夫 《春风沉醉的晚上》一:“摆好了画架的板,我就朝着了这张由画迭成的桌子坐在小一点的那堆书上吸烟,我的背自然朝着了梯子的接口。”
$ a7 e0 p3 |- l# M+ B2 C
0 }! u8 G) x9 T$ e, E( c. {2 硬件接口
/ C; B {% j: L1 j3 I: V) RIDE
# N6 ^# Z6 M' m ?+ i; g ]/ X& W# J0 p
IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强,硬盘制造起来变得更容易,因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容。对用户而言,硬盘安装起来也更为方便。IDE这一接口技术从诞生至今就一直在不断发展,性能也不断的提高,其拥有的价格低廉、兼容性强的特点,为其造就了其它类型硬盘无法替代的地位。
2 ?, g+ w! ~$ N0 d; \
) H. {( D& r1 N' w; P2 U% F5 T& n* \; IIDE代表着硬盘的一种类型,但在实际的应用中,人们也习惯用IDE来称呼最早出现IDE类型硬盘ATA-1,这种类型的接口随着接口技术的发展已经被淘汰了,而其后发展分支出更多类型的硬盘接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都属于IDE硬盘。2 B! R: A; W @8 t
1 r$ V z; _9 x+ C
SCSI! N C( Y0 I( W: P3 `$ ]
|2 a& V5 @, D$ U( ]/ [) J6 \# ZSCSI的英文全称为“Small Computer System Interface”(小型计算机系统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使得它很难如IDE硬盘般普及,因此SCSI硬盘主要应用于中、高端服务器和高档工作站中。" d2 \2 n4 s6 H$ r/ h
, S6 T, Y& X7 E' N/ l6 P
光纤通道
7 M: e" y C8 \& T9 b+ z4 M4 `3 c, l
光纤通道的英文拼写是Fibre Channel,和SCSI接口一样光纤通道最初也不是为硬盘设计开发的接口技术,是专门为网络系统设计的,但随着存储系统对速度的需求,才逐渐应用到硬盘系统中。光纤通道硬盘是为提高多硬盘存储系统的速度和灵活性才开发的,它的出现大大提高了多硬盘系统的通信速度。光纤通道的主要特性有:热插拔性、高速带宽、远程连接、连接设备数量大等。( k) D# B: o- F) I* O- l9 T0 W
/ |5 _/ h; q; H$ F7 P' @光纤通道是为在像服务器这样的多硬盘系统环境而设计,能满足高端工作站、服务器、海量存储子网络、外设间通过集线器、交换机和点对点连接进行双向、串行数据通讯等系统对高数据传输率的要求。
* |% I" B/ `: t2 W& Y- S9 K8 S) T0 T7 c4 D
SATA
Y' T$ n- @- I. @
8 a9 @4 H, w( T, ~使用SATA(Serial ATA)口的硬盘又叫串口硬盘,是未来PC机硬盘的趋势。2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会正式确立了Serial ATA 1.0规范,2002年,虽然串行ATA的相关设备还未正式上市,但Serial ATA委员会已抢先确立了Serial ATA 2.0规范。Serial ATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点。串口硬盘是一种完全不同于并行ATA的新型硬盘接口类型,由于采用串行方式传输数据而知名。相对于并行ATA来说,就具有非常多的优势。首先,Serial ATA以连续串行的方式传送数据,一次只会传送1位数据。这样能减少SATA接口的针脚数目,使连接电缆数目变少,效率也会更高。; a. o* g, Q* h# p' E
( \+ v- ^8 L. w5 e2 t8 U
游戏设备8 U1 G% e, O8 I
( q; ?9 |" `/ @8 w指游戏设备与电视机或电脑主机之间的接口类型。具体有与电视机相连的AV接口,与电脑主机相连的串口、USB接口、PCI接口、I-LINK(四针IEEE1394接口)、连接声卡的MIDI接口、无线接口等等。+ b2 w& }( ^9 Y P1 G4 ?: k8 ?
5 X9 V% j( H0 i% QRAID卡2 \# u7 U; }8 t) W. p
- x% ]4 O( z7 `
当然IDE RAID也有其缺点,比如在CPU占用率和连接设备数量等方面就无法与SCSI RAID相比,同时,IDE RAID目前为止还只支持RAID0、RAID1和RAID0+1,并且性能上也比SCSI RAID略逊一筹,因此高性能计算机应用方面还是以SCSI RAID为主。SATA RAID是刚刚诞生的RAID方式,它与IDE RAID类似,最大的优点是低成本,其他方面也和IDE RAID接近。9 }/ J4 A9 `5 S: \
' {2 v, r3 j. S" A$ ]9 m5 P3 c是指RAID卡支持的硬盘接口,主要有三种:IDE接口、SCSI接口和SATA接口。' D, G* s. f3 a/ }2 Q
7 x' i0 i% J9 }9 Q4 Z7 LRAID技术问世时是基于SCSI接口,因其成本高,因此主要面向服务器等高端应用。普通用户根本无缘拥有RAID。随着计算机的大众化,由此带动PC计算机的空前繁荣。相应的,在市场的带动下,用于PC计算机的IDE接口设备价格大幅降低,同时性能大幅提高。鉴于此,RAID技术开始移植到IDE接口上,推出了基于IDE接口的RAID应用,称为IDE RAID。而基于SCSI接口的RAID应用则相应称为SCSI RAID。与SCSI RAID相比,IDE RAID具有极低的价格,和一点也不逊色的性能表现,相应的,IDE RAID 解决方案就具有SCSI RAID无法比拟的高性价比。因此 IDE RAID自推出后,受到普通PC用户和普通商业应用的普遍欢迎。
8 M3 f& I0 T" r1 |2 S7 j: ?! ^; }! T$ H1 n8 @
USB
[, }& t5 x4 t# g8 Y! c3 _9 Y5 O4 `# a! o. D* H
USB接口:鼠标、摄像头、u盘都是使用USB接口的设备,如果想要使用他们就必须连接在USB接口上,这些设备的接口必须遵守USB接口的规范才能通过USB接口来使用。
' n/ F1 ~$ {' D, V, H
/ [7 N/ Z9 s. s. tMD设备, M; u9 y8 S$ U, D
+ y/ H! a; R, z* C$ d' k
MD设备接口(港台称之为埠)指的是MD(Mini Disc)产品具有哪些输入输出的接口。首先作为MD产品,耳机的输出接口自然是必须有的。除了基本的耳机输出接口之外,录放型产品还应该具有线路输入的接口,这样才能够把MD和其它播放设备相连接,把播放的音频输入MD并且将其录制到MD片上。NetMD产品还应具有USB接口,这样才能够和电脑相连接,从而能够进行文件的传输。有的产品还具有麦克风的接口,可以把外部的声音通过MD录制下来。, h q/ e0 Y. n: T- P
& l# C" B( ^2 F" E. {8 n2 sMP3
* {/ C' I7 z( X% j
. V; Y6 B9 ]* D
! h, v& [) n8 DMP3播放器常见接口包括并口(EPP)、USB接口和IEEE 1394接口,早期的一般是并口,由于传输速度的限制,并口的MP3已被淘汰。如今市面上的MP3接口基本是USB接口,优点在于传输速率快和支持热插拔。还有一类MP3使用1394接口,随着MP3容量的增大,相信在这方面会有更多人关注,因为速度越快,在容量大的机器上就体现出它的好处了。
5 L9 q) y0 j& J3 f! n2 @& D, J9 [, O+ K$ i" I: ^4 B1 v" h3 a- C
视频
1 J. k0 t6 E! m" k# R& L; k2 b4 \
, t: k! \/ j* @0 R6 O6 J. S/ B s1.射频, D1 m n! ?# K% b
7 \3 p X" A$ Y
天线和模拟闭路连接电视机就是采用射频(RF)接口。作为最常见的视频连接方式,它可同时传输模拟视频以及音频信号。RF接口传输的是视频和音频混合编码后的信号,显示设备的电路将混合编码信号进行一系列分离、解码在输出成像。由于需要进行视频、音频混合编码,信号会互相干扰,所以它的画质输出质量是所有接口中最差的。有线电视和卫星电视接收设备也常用RF连接,但这种情况下,它们传输的是数字信号。
, w% ]0 g; p2 o7 [5 D+ ?. D! A$ l$ C: b
2.复合视频% s) N w9 P8 L- I# u! X1 I
- W# B8 h; L, Q) _3 L0 Z% V, E
不像射频接口那样包含了音频信号,复合视频(Composite)通常采用黄色的RCA(莲花插座)接头。“复合”含义是同一信道中传输亮度和色度信号的模拟信号,但电视机如果不能很好的分离这两种信号,就会出现虚影。# w3 @7 h4 }( P7 P& G0 ?
% Y- x2 m$ ]" V: C8 H
3.S端子# s; Z8 A7 b6 G) s* B( o
! V3 G; z8 g Q- @
S端子(S-Video)连接采用Y/C(亮度/色度)分离式输出,使用四芯线传送信号,接口为四针接口。接口中,两针接地,另外两针分别传输亮度和色度信号。因为分别传送亮度和色度信号,S端子效果要好于复合视频。不过S端子的抗干扰能力较弱,所以S端子线的长度最好不要超过7米。
" e9 c& u" d5 L5 U, y, T* t6 C
: N0 b1 e' u2 Y- {4.色差7 Z: c9 c: Y* B* ?
8 Z' ~# `. ^4 _3 J- a) e/ ^
色差(Component)通常标记为Y/Pb/Pr,用红、绿、蓝三种颜色来标注每条线缆和接口。绿色线缆(Y),传输亮度信号。蓝色和红色线缆(Pb和Pr)传输的是颜色差别信号。色差的效果要好于S端子,因此不少DVD以及高清播放设备上都采用该接口。如果使用优质的线材和接口,即使采用10米长的线缆,色差线也能传输优秀的画面。 g T9 K: e3 ]8 ^0 P
+ n4 [5 ~0 x, \: Q/ [
5.VGA
* r6 X8 j# K7 l2 S7 G* c
6 |/ z) q1 ~+ R |. Y! P9 CVGA(Video Graphics Array)还有一个名称叫D-Sub。VGA接口共有15针,分成3排,每排5个孔,是显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。使用VGA连接设备,线缆长度最好不要超过10米,而且要注意接头是否安装牢固,否则可能引起图像中出现虚影。
+ n: m& t, w* H( i( i# ]1 o# Y0 A! n
6.DVI7 X, l: ^+ n6 i, a! M
3 i/ S) }8 e1 [/ T( e7 ADVI(Digital Visual Interface)接口与VGA都是电脑中最常用的接口,与VGA不同的是,DVI可以传输数字信号,不用再进过数模转换,所以画面质量非常高。很多高清电视上也提供了DVI接口。需要注意的是,DVI接口有多种规范,常见的是DVI-D(Digital)和DVI-I(Intergrated)。DVI-D只能传输数字信号,大家可以用它来连接显卡和平板电视。DVI-I则可以在DVI-D和VGA间相互转换。
4 q; ]' l' c' k& z; ^
7 Q, D$ y. A7 n* l7.HDMI( O, d9 {0 X# D: t# C9 L8 |& C
, r: E/ x! B( t4 O" vHDMI(High Definition Multimedia Interface)接口是新出现的接口,它同DVI一样是传输全数字信号的。不同的是HDMI接口不仅能传输高清数字视频信号,还可以同时传输高质量的音频信号。同时功能跟射频接口相同,不过由于采用了全数字化的信号传输,不会像射频接口那样出现画质不佳的情况。对于没有HDMI接口的用户,可以用适配器将HDMI接口转换位DVI接口,但是这样就失去了音频信号。高质量的HDMI线材,即使长达20米,也能保证优质的画质。
5 S$ n& A0 n8 N
5 {# i, E# V/ ]/ l8.IEEE 1394$ A' g/ I9 Y5 Z3 K. n
3 l7 w3 o- T+ Z: `' i0 @1 a J* ?IEEE
) b5 b! F' w M- \% F+ N! |. i) l7 S# v
1394也称为火线或iLink,它能够传输数字视频和音频及机器控制信号,具有较高的带宽,且十分稳定。通常它主要用来连接数码摄像机、DVD录像机等设备。IEEE 1394接口有两种类型:6针的六角形接口和4针的小型四角形接口。6针的六角形接口可向所连接的设备供电,而4针的四角形接口则不能。
4 u! p3 c \! m+ s& Y% a( V/ [
. Y, M& y+ U! h# ^ P; v9.BNC
5 S$ l" \6 s! C* \# Y. P% u- f( b# i) Z0 S' h: |: @
BNC全称是BayonetNutConnector(同轴电缆卡环形接口)接口主要用于连接高端家庭影院产品以及专业视频设备。BNC电缆有5个连接头,分别接收红、绿、蓝、水平同步和垂直同步信号。BNC接头可以让视频信号互相间干扰减少,可达到最佳信号响应效果。此外,由于BNC接口的特殊设计,连接非常紧,不必担心接口松动而产生接触不良。
" z4 b9 D% V) e" M" N. V! M, S6 p% ]5 b
音频3 A1 K+ t6 r: G- n3 b$ q. z
1 m+ O) } `' N" [ W' m主流的音频接口有如下几种:& _% \+ q5 i2 B1 n1 v. Z- q
' Q' N$ `% S# x+ y2 f
RCA模拟音频5 N7 C1 @( R$ J9 u& u
4 Q$ d( r' ]# @6 G# s$ SRCA接头就是常说的莲花头,利用RCA线缆传输模拟信号是目前最普遍的音频连接方式。每一根RCA线缆负责传输一个声道的音频信号,所以立体声信号,需要使用一对线缆。对于多声道系统,就要根据实际的声道数量配以相同数量的线缆。立体声RCA音频接口,一般将右声道用红色标注,左声道则用蓝色或者白色标注。
, O6 \* j# T0 [3 ~! U% R7 W( M( e
: O$ u% U; n8 d2 cS/PDIF
' x2 I; W! X+ y/ R' D
1 _ q! o# A: }, D3 P# IS/PDIF(Sony/Philips Digital Interface,索尼和飞利浦数字接口)是由SONY公司与PHILIPS公司联合制定的一种数字音频输出接口。该接口广泛应用在CD播放机、声卡及家用电器等设备上,能改善CD的音质,给人们更纯正的听觉效果。该接口传输的是数字信号,所以不会像模拟信号那样受到干扰而降低音频质量。需要注意的是,S/PDIF接口是一种标准,同轴数字接口和光线接口都属于S/PDIF接口的范畴。6 S; s& ?7 U x) W2 E ^- j
- t# ]1 h- j8 G$ x数字同轴
( c0 H0 O# c7 K2 P; c) f
& ]. X/ ]" Q/ u: k# w1 V数字同轴(Digital Coaxial)是利用S/PDIF接口输出数字音频的接口。同轴线缆有两个同心导体,导体和屏蔽层共用同一轴心。同轴线缆是由绝缘材料隔离的铜线导体,阻抗为75欧姆,在里层绝缘材料的外部是另一层环形导体及其绝缘体,整个电缆由聚氯乙烯或特氟纶材料的护套包住。同轴电缆的优点是阻抗稳定,传输带宽高,保证了音频的质量。虽然同轴数字线缆的标准接头为BNC接头,但市面上的同轴数字线材多采用RCA接头。7 W( F R3 O) n
! p* R5 K; s3 U7 M* ~+ S5 u
光纤
9 ?( J: V6 p# k
' k( }0 X, ?* g4 _光纤(Optical)以光脉冲的形式来传输数字信号,其材质以玻璃或有机玻璃为主。光纤同样采用S/PDIF接口输出,其是带宽高,信号衰减小,常常用于连接DVD播放器和AV功放,支持PCM数字音频信号、Dolby以及DTS音频信号。$ h, Q- Q" c& Z, g% S* @- j
- Y% s. \9 S( y+ g3 gXLR接口$ T" m/ m- k2 L, y! v6 L
1 y Y% k4 j. @2 T与RCA模拟音频线缆直接传输声音的方式完全不同,平衡模拟音频(Balanced Analog Audio)接口使用两个通道分别传送信号相同而相位相反的信号。接收端设备将这两组信号相减,干扰信号就被抵消掉,从而获得高质量的模拟信号。平衡模拟音频通常采用XLR接口和大三芯接口。XLR俗称卡侬头,有三针插头和锁定装置组成。由于采用了锁定装置,XLR连接相当牢靠。大三芯接口则采用直径为6.35毫米的插头,其优点是耐磨损,适合反复插拔。平衡模拟音频连接主要出现在高级模拟音响器材或专业音频设备上。
; g B( s, n; @- `9 x1 Y, M& b0 W$ h- W7 f1 ]" v- a6 h
3 软件接口
) ?4 v! @, l; ]/ A7 f7 E( k同一计算机不同功能层之间的通信规则称为接口。
* E4 Z& r ~2 }: l1 C# z$ d
- T: ? j8 \ F+ {9 K7 f# d对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。' Y) {% H7 r; I: G7 k& Z0 x' E8 Q, Y
9 T! f' j) w7 x$ g( [, D# @2 d
VB.NET( 一款行业软件)接口
0 M! d3 {9 k* x' p A1 J
& b5 Y! e" n. |在VB.NET的类里,实现一个接口的语句是:6 s+ W0 m$ Q0 m1 {- g( w0 Z
% s) G! j& C" p( k
implements接口名称( {& r6 f: W1 Y3 R$ ?
: |6 M( {* a5 _6 q0 j
例如,下面定义一个车(总称)的接口,这里的车是各种车的总称:7 V5 r& T. w. D7 G% R5 t
" \! X2 I) ?6 _/ p M( n4 sPublic Interface ICar
1 Y: I% E- o) o: u5 \
7 {6 u3 r- ]" |3 V9 E7 F6 MProperty color() As String
8 X( h! O' I2 F& U, t* m, \7 i% `- g1 s1 z+ M1 ?4 a
Property speed() As Long
' h a# N! Y2 z$ `8 D8 V0 t) ]* Z9 f- g, g7 e& C" a+ a
Sub PrintInfo()
) N" t9 F" a( p4 O' Z% t' H* c. |
& F5 ?2 \; _* w5 l9 } xEnd Interface8 M2 c1 x: H7 A' m. ]) f
* I* `: c% `8 e8 V/ Y0 X0 }
然后在不同类型的“车”类里实现它:5 g8 Y" l0 C, _
- f, l0 y2 g- N" G" Z4 }. n# j. ~
Public Class A_Car
* N/ b, c. r- |" R7 M9 O8 J9 Q8 M) L0 T
Implements ICar3 X+ \5 U" ]% h% T l3 w
/ W6 P+ G+ w' IDim m_color As String, m_speed As Long) g1 {4 K0 K& b' i
7 E" v! a6 L P& ?) t
Public Property color() As String Implements ICar.color4 D! n$ B" l# @ M5 m, W4 g
5 ~- u9 m8 w( YGet
- H4 G6 G3 j2 t) T5 \; R1 \5 a& B* @" m. S
Return m_color8 j! J' G, A( u6 t
7 n7 m" y: B0 l( c; `% ?
End Get# j+ c% t7 y' H7 m3 E
5 R2 P+ m% E7 f+ h6 ~/ o
Set(ByVal Value As String)8 b- t& e3 }. X& h
; G; p! l. Q om_color = Value- M+ s$ z+ L% c+ m- R3 I
3 P! ~0 _( v0 ^5 g+ W
End Set" R! R7 E# o6 r- C! S' ?& o2 `8 ~
0 _/ n2 H' H+ V3 P" X' o( o3 [End Property
$ ?( k7 I$ V B8 y( C# @
' k* M: ]/ V2 T( O$ h1 aProtected Overrides Sub Finalize()
8 ]9 r1 y; {0 h: B3 j
/ U2 l4 s* I3 t2 e: E& x% o% ]MsgBox("I was deconstructed!")' o4 p7 p5 q' ^$ o
! j- }5 `+ a5 @7 F7 ^# C3 R
End Sub
5 D( k0 c3 M% F+ O6 `, Q% _8 Z0 Q. D$ b, ^
Public Sub New()( w) Q3 [ p/ s' N( v; }# q! t" a
! U" d) z- l4 m# U6 z/ }% w; ]m_color = "Red"
3 J+ @) ? j; |0 A9 s4 d5 k/ M3 }6 B1 f x$ s+ l% ^4 `
m_speed = 210
6 ?( |1 y2 a$ a% ?% V; V+ `8 K, T, \& G2 U
MsgBox("I was constructed!")
3 Y. V# E1 k: z4 r1 w5 {7 p: C* f v6 v1 E z7 v$ G
End Sub9 \) [) M9 |9 J: [& r" n `' U4 m: M
; l1 Z' L; f: w4 m3 Q" q# z8 @, n
Public Property speed() As Long Implements ICar.speed; l! l4 x6 K: Q1 H& H& O
" q/ F: G+ H0 U* s5 S; @Get' F& O8 d3 g+ X0 w+ s
( c9 F; m0 D3 J8 t
Return m_speed+ C$ e% M$ M( O' l
. T3 ?9 a4 {3 j( HEnd Get$ g6 x K ]0 D& N+ m9 I; T' U
, t% f" f. h& q9 ?0 c
Set(ByVal Value As Long)# @ g; m. p* v
& S6 c* Q# |# x" k0 Zm_speed = speed, v' ^9 b/ ^5 ~3 p' E# q! q
- f3 ^" e' }$ r; B; ]' s+ O
End Set9 G' \0 v4 ?# v* F! u
3 A1 v2 o) V' JEnd Property; U. H. c+ v1 e2 i
& W2 x1 s# W+ XPublic Sub PrintInfo() Implements ICar.PrintInfo* A1 p8 t( A9 l! H. P
3 o& s9 C9 n0 ^7 ?MsgBox("Color: " & m_color & vbNewLine & "Speed: " & m_speed, MsgBoxStyle.Information)# l9 d6 ^4 l0 p( a- {2 _$ h f# x
3 D' f/ C& q) l7 `6 ~End Sub- C' a! }. s# J- O/ ~6 O E! T7 j
" X$ Q7 a& Q" p, b& pEnd Class
; M3 R% j! J8 J0 n" z% q
' g8 I! h3 Q: H+ C2 B9 v/ w/ _在 Form 的 Load 事件中编写:
5 F0 i) \; l8 Y6 L$ I# B. J/ [. z+ o' H
Dim myCar As New A_Car2 s) \. q" W" {) r9 O7 M" ~
6 ^3 |& C; r& o* T* s
myCar.PrintInfo(): e0 d' j; [! L7 Y: X: u* @
4 P4 m: \+ c. |( O2 U! r
运行之后就创建了一个 A_Car 类的实例 myCar,然后出现两个对话框,分别说明实例已经创建和汽车的信息。当窗体卸载时,这个类的实例 myCar将自动销毁,这时将出现一个“I was deconstructed!”的对话框。
6 A+ | d* D0 x3 c: S; L5 l+ ^) B
声明一个接口时,需要考虑以下几点:
" F9 |( ^" |! m) i
+ U' o3 F, R8 f% W% x$ F1.接口主体只限于对方法,索引器以及属性的声明;
# V8 Z S' f9 B; w9 h" k1 q+ t3 @+ I0 B% Y
2.接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误;' u$ m( u, i; i, a3 p1 v# c# F- g
* X' D; r( P2 J0 `9 H: H( V5 Y
3.接口中不能包含字段,构造函数和常量等;
/ ]+ L2 W4 T+ v& Z0 h5 a4 h, y) K6 G; d+ [# W4 i2 f* b! L! x; `) H
4.在接口中不能实现任何方法,属性或者索引器;# S6 W$ g. m; u y d
3 ?+ }1 p) n! o5 w& \8 |5.在指定方法时,只需要给出返回类型,名称和参数列表,然后分号结束。6 ?3 D1 k, G$ @2 @
1 y( H* L8 L( R0 r面向对象的接口
6 \( q. T& o8 l
: N' P' d( X9 H* z- X1 u在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。
* Y4 ?& A( G% y y. b; f$ A! ?. A$ i
这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。; y* {& O& n2 Y! V- } X
- }) q0 G: \9 V" M$ {8 _7 _一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数是相同的。不能被实例化。
- S# G" `; t8 U+ A+ Q5 U" c8 C N8 A9 Y2 y ~ V
定义接口的关键字是interface,例如:
; Q' T8 t8 y( e, \
; b4 o1 s B3 c0 q: K- s1 _publicinterfaceMyInterface{
5 r$ e2 ~6 W `$ k: O2 t/ N! j: f+ F0 Y! b
public void add(int x,int y);$ N. Y9 x- o2 ~3 S' l5 s" _
1 z3 X* r; p. D
public void volume(int x,int y,int z);
- H+ E/ b* s' R- V" }& j& ~$ d- q7 m4 y& n
}
1 E/ M, v+ _/ Z' v6 T2 K3 ]2 r' n* x/ e) c0 Y- p0 Y3 z
继承接口的关键字是implements,相当于继承类的extends。
, J& y% d# F' k& E
+ u" j1 n( y1 B3 v需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖。例如:
7 q( A9 {0 w3 @$ Q8 A
( |1 U2 e- i, A# W. Hclass Demo implements MyInterface{% W% ]5 N' f$ p+ \9 |- L2 I3 X
" P4 r! M j3 q( j1 p
public void add(int x,int y){& Y) o' |2 s U. M" Y, d$ T
4 E8 ^% \6 g- z4 U# e7 W; PSystem.out.println(" "+(x+y));
+ c& a! q( d* I- d/ o1 P- {+ I+ }: M- \+ D6 N6 n! @7 t
}
$ N. S- d; Z, @4 N3 u0 J, \1 E6 N( C7 s. q# K r# \
public void volume(int x,int y,int z){
) s; a Q% ~9 A. c/ e) c: P0 O. t4 B4 \, H& a4 j' C- q+ d
System.out.println(" "+(x*y*z));
' |+ e2 \3 y' j+ O$ X$ L
9 [5 y1 q5 d9 f7 e; h}
, t* H: i; L* J( B
/ g4 j {: g9 i/ D8 Apublic static void main(String args[]){
0 l+ }$ O" N8 l# l
6 l ]$ \! P, iDemo d=new Demo();* _# l( I& c& h2 S" D; H s
v) V* h5 ^& Q# ?0 N0 n# rd.add(10,20);
" I( |" {' O3 ]6 a* a$ ~' w
, A: O U, S" W1 M/ T# _$ k# ?d.volume(10,10,10);
" @1 n# r/ O, c5 l( v I7 K
0 F4 J2 ~6 A. z( E+ B}4 }9 A5 F! p9 _# G3 W6 T) F
9 M, t' }9 [ y. Y, i3 O
}2 ]1 r' t! }& q7 N
0 X7 \% z# O/ {
输出结果:
$ ~. K/ M4 p6 G5 |) l! ~
' T C- G1 U$ S# o. J) y30
2 _' Q- N: R, a* D
' \ ]# V5 [" t Q10000 @3 O: ]. ` i. J' K. A- T
R% C* f" i1 `5 L$ W4 e6 Q- ]
当想继承多个类时,开发程序不允许,报错。这样就要用到接口。因为接口允许多重继承(,),而类不允许。所以就要用到接口。, L' G: O- P/ e9 O7 b' t% j
& o! Y7 a( {; O/ jJava里的接口$ N% w5 S; m8 ^) W0 e. U8 i
v2 F% Y4 C! j( w( _Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。! {* v- ^ {; {! e
& f5 y% a( p# k7 N0 k
Java接口和Java抽象类代表的就是抽象类型,就是需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为java结构层次上的顶层。
" t) j3 o; I# h& c( N% I! u- s8 S
Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。
, a# w6 r1 R& f1 A. g
' p- F" v0 g/ z1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。; @& K. {- t# \+ [
* W3 d5 U C* _: k Z% j. Q
2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。: I; D/ D8 b8 G, p. `) A
2 V5 a4 T& A7 n' O l% N; x
3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
, ~* {, R3 ?6 l4 L1 t+ E* \. j
4 A5 a# {3 |9 y; N/ _c#中的接口& _8 `2 c# [6 o X6 t! X) `& E/ m
. W2 m5 f' R: |, hC# 语言参考6 E0 ]/ ~8 T) J+ {8 `) \* K
2 K7 \# L" C+ \/ |. F4 y接口(C# 参考)
! l" `1 i& |2 b2 J1 w) u3 Z& D# |
9 Z+ V/ D/ [5 q0 \2 J定义:接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容。
* o% M6 [9 H1 U" f$ a# Y8 q( C1 p i' @; C: x, r3 P8 @
目的:接口的主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类只能继承一个父类,所以接口是让一个类具有两个以上基类的唯一方式。
+ c8 ]% v3 J5 {+ U( L0 C
0 j3 Q% t' V2 w/ G. n0 J9 Z4 ^声明:接口声明的方式与声明类的方式相似,但使用的关键字是interface,而不是 class。1 R+ E4 i: o1 G
! M7 @: H( r( Z h; @0 o# F接口只包含方法、属性、索引器和事件的签名。方法的实现是在实现接口的类中完成的,如下面的示例所示:2 t/ ]" \0 i a
) L) d* n o z* q7 }
1, ~/ F' y# G' Z& W0 v
7 e' g+ F& |/ U: y, H2
3 x0 |* H# V4 @, U5 U$ h! V- z9 g3 u3 h- q
3# e+ h" b$ }6 d8 n
# z/ M# m h" X0 Q$ |4
( W1 z1 N# ~9 j/ V
& v" x$ B' o N& J2 O( ~: z# l/ G# D5
6 a9 W6 _2 b) _9 J3 {' B2 a2 @- B1 Q3 B' W
6 t2 l8 R% L5 \3 Q- u6
/ }) Y, @' ]2 b* h
: B3 e9 k+ a7 |4 v& A: J7
+ N* q- U$ x8 k8 K% f; t3 ?, B! o- p) X6 F* J" G+ `
8( n8 _$ }- @7 Z5 I9 b+ g
. W+ T7 ?( K+ y: _$ r* L
9
+ S/ P/ ~% w( k0 R! m$ s4 a; Y* F3 r8 y
10' ]% b- L7 ~+ m, k
4 T: @2 w8 X- }8 g3 n. u3 w11
4 A0 d8 O/ d) V y4 N& ^6 Z0 ?- |$ d! c6 A# W* a
12
+ T8 M. M i; {' L; ~
8 g6 a# [! C4 J \% j" }( K13
2 d2 O$ |. }7 v- w
7 @2 `* w6 U4 E/ E4 _5 h; a8 R14
7 O' W5 R, B2 ~1 r3 [; M% ]* z
/ c+ k0 h" m# ]) ?$ N5 s9 i9 U: D15
! }+ \0 `2 E( p8 u8 Y4 S
5 @6 z/ m' o' g2 Z" g; j16
: U8 C8 C# d9 x' r) `, O0 t& L9 o# B8 y o( H9 V- f. `
17
" V& k& h/ K" I5 h8 H% P! u9 r
1 O: W! F! B( ], A3 X% C18
+ x: u; |' X; H, d9 u. g3 p% }" I& j5 ?9 ^
19) D" B: a- ^: U3 K/ G! U5 b
( U- y$ w" u5 g6 I, t6 O: U4 ]! |20
; N; R* s W1 k. e$ k6 s! m
' Q+ I: y, z+ F210 a( ^: x! X8 J: b+ C/ W9 o) D0 @
/ d' B# E6 }6 X* v( p5 v: J/ y( G
22; X: @9 ` ~9 V3 s8 z
C/ k/ f: J0 D23
2 o+ T+ P" _: {
5 Q8 {. H$ f9 P* _" i9 @$ ^6 L1 c24
! Y' z- ^( t9 }( ~- M2 T- D1 |8 ]/ v K& u! z# W5 U! t, x
<printcolor>interface ISampleInterface( Q: I" x. ~6 P! {& j' n
& l% `$ p3 [8 P6 m{% d! [+ ^! S" |7 _- G# l, u
7 e& m* Q7 t8 }: J//interface members
4 h* X# q4 Y- z
3 {+ l+ p% h8 G5 L, ?void SampleMethod();
' I( n) l. D7 q5 L1 w+ A+ f3 x, N- e7 O: s
}
6 a. F4 ~; i T) [0 H4 g4 _6 p W+ X* `) b& R
class ImplementationClass : ISampleInterface
* v5 L9 S# V# e4 E1 F5 R2 X# i+ P- J+ F$ M- k
{
% W# n5 |. O6 m. d4 u
/ E+ I# [) p6 c//实现接口成员。
! S' L- ^: P( Z d+ Z. Q$ z" p
& {( [+ {7 S9 ^. p: p# tvoid ISampleInterface.SampleMethod()
, @1 c* F* j! J3 V
, i' Y, V" M$ |{2 B) _* r" A( E) v6 F* F; n% l
, ~( [- J l9 Q- G2 ~1 h//方法实现。: ~/ e& w& J" V) C1 m. g
9 |- `$ i T0 e" @
Main();/ y. o8 Q8 M* r5 f
8 D, ]; n. @ {
}
; [: ]5 G+ L% S+ k6 @, S; Z+ X: |2 k
static void Main()% Y* H1 ^" L7 x1 p& z: L
2 I- t' t- y7 q! M# k9 `) {( v
{- ?9 |6 r: q$ ^8 ?% K4 p
6 K! o) r: V1 y7 l( ]+ |// 定义一个接口的实例变量 obj。: V0 ]& D. Z1 x
" v7 s& c5 D2 J- C* a- i% [
ISampleInterface obj = new ImplementationClass();! T- K+ N k% s+ Q# j _
& }# L& k# ?/ _, {
//调用(obj)的成员方法。- ]4 H; a+ Y, e7 C
6 O4 y+ q! z/ S
Console.Write("ok");
7 Q# i, H" @9 Z/ W3 M9 }$ ]( f
. G# ?4 n# D/ W- {/ f2 ]; gConsole.Read();
) j" j1 L% P% |& _2 f* ]+ o( Q% U$ R, w8 j3 ^( j" N6 f) A- d: I
}
: \2 \0 _9 f# c% U& R0 U
: ~; H R" E6 E" H. g}
# j/ H; Y" U: z8 K+ @1 Z- H) V& ` f- U$ @# C3 V T
</printcolor>
% Z+ i* H# O N- L5 N, Z5 p: D M3 {1 x6 `% |
接口成员的定义:与类成员的定义相似,但是要注意:
% z( Y4 J Q0 a U0 K) O ?& `
% B+ u) V! F, Q' _8 w7 V4 ?不允许使用访问修饰符(public,private,protected 或 internal),所有的接口成员都必须是公共的;
7 y& E) w/ U. J2 ^, K. Q
, U. R( y1 L# I) v/ a6 K+ |接口成员不能包含代码实体;! h5 p& ~! w6 o6 M
5 X) }( w" M% k. Q0 L2 K3 h
接口成员不能定义字段成员;
& p* ^+ a$ B# s: x% u* f( ?0 \
5 Y3 o; c" {; n& s接口成员不能用关键字static,virtual,abstrac t或 sealed 来定义;5 f: r# O0 M4 M/ P* g4 ?7 n8 v
6 o4 K7 w) C$ w/ X+ k& a1 ?类型定义成员是禁止的。
3 a5 b3 B4 d; x; g3 p
% H! i9 r: \+ ~4 ]% f如果要隐藏继承了基接口的成员,可以用关键字new来定义它们,例如:6 u$ @. I2 P, D3 }8 w
: F1 B0 n( E1 E% ^& A: U9 j0 H
1& Z, u4 h3 S, w6 p4 X* g4 E
g S- {& @" l1 k" b2
6 z- w. D0 N! V7 ?2 Z9 J
, N; E6 j, r- W$ R9 [+ K: F3
8 s* T$ V/ Z! ?
( D; a3 L$ H- A6 |' N3 b* k4' ?9 e7 ]9 `/ M+ W" g
* Q& {) L0 q3 u. f58 k% x. U' c7 J2 e9 O+ s f8 p
4 R' ]( O) ^! \) B3 p x9 C1 S6 i' A6 {$ A5 c' b8 x% z
7 o* |- V' ?& O( U+ f$ t9 w
7
! b( U' _8 M5 w* u$ D( B: O0 ?5 P V9 B
8
$ C: o: w+ _3 L6 b( A# \7 m. ?: R* u5 |
interface IMyBaseInterface8 L8 U' _0 H- T7 @2 R0 Z6 H
. R M8 J! x$ h) L4 o B" Z8 N
{# s8 i; H- L7 L
1 W$ F+ K: u5 S& A. V8 B8 I
void DoSomething();
' G( ]: v b$ P1 B5 \, V! ], B8 ~* r0 R: N4 [5 F
}: z5 o' X6 I" o* d2 P" b9 Z& K
' \$ b, B( @9 E3 _2 U
interface IMyDerivedInterface: IMyBaseInterface5 F v! [1 B* Z7 {
+ G7 e$ r8 O3 c( D
{
0 @- e9 ]! X$ A7 [. g2 A6 D0 a
: A& Z1 l2 P3 e3 h: Z, M# Rnew void DoSomething();2 O* R% R& R2 S; Q4 }) S/ u
! B. f, O/ d, t# A
}
; \; _0 {+ g7 W- s1 U8 r
) y& K! g) t4 K备注 :
! P+ A0 ?7 H3 W. D$ E1 g& `1 F$ z/ S Y3 Y$ x+ M6 k1 L3 z. t P
接口可以是命名空间或类的成员,并且可以包含下列成员的签名: }. f1 ]) f k
* j" O# E9 p: y' ~ Q& ^# {2 Z
方法属性索引器事件一个接口可从一个或多个基接口继承。
5 W9 X# Y. g3 r# O+ s/ W1 `3 M6 E0 X' ?" s: G. @$ }' ^
当基类型列表包含基类和接口时,基类必须是列表中的第一项。: i8 Z9 t2 \: n$ K8 o5 L( g2 T- S
6 H! ~" R; M. S" G
实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问,例如:
) L5 y6 r3 m0 R
. w4 h* R2 {4 E3 z( G8 A! J' T% p5 b+ X有关显式接口实现的更多详细信息和代码示例,请参见显式接口实现(C# 编程指南)。
; M' U: s* A# a6 F0 ?5 N7 l. F5 t2 u% X/ U
示例0 Q9 c" T, B6 P( `& R
; X3 b; ] D! V下面的示例演示了接口实现。在此例中,接口IPoint 包含属性声明,后者负责设置和获取字段的值。Point 类包含属性实现。4 s, U& N9 @" f `5 ?; B( x0 g
* U0 g8 X5 o* y% p! W8 J
1/ d. N/ I) }5 g: v, |% m
+ X" `% ^6 E! U/ T9 g2 s4 `2
_( S. L9 a. h
0 B; x# i* O) C" r3
+ D, L7 X$ Z/ Q) f- d# m
5 w2 W. K, L5 G. b% d$ R+ P4* Z! H+ R9 E7 B; m
& O% g+ z8 F _# K# {7 r
55 Y! P* x/ v7 Y! w& c8 _, c
* y+ N# h1 Q& n$ W- H2 z6
. x, c& d$ T* X% i0 `, t& p$ a2 w, V9 Y
7
8 i& M5 f$ B9 B
: s* R+ D/ j" V# {0 \8
% g8 [% z' W. q1 W
. L0 n0 H W( U: v' a$ { T9% \( B3 r ] k
# l8 ~( q6 d3 B) r& z& q/ G10
2 }' j; m, i8 U( n
( y( x9 l" W- l11
' o' Z; y5 Q y; {( D; r& A) j
& B1 ]; `2 V0 c8 u, f3 A127 D! n; {7 ?2 h$ q! J
3 O/ E) b5 d6 k' a13
" K+ r! c# S& w' ^/ V6 @
' H+ x- x" a4 @2 _9 A! d0 F" t14' k7 j0 I; a) B& D& a
( P. E% q4 x. G: ~) |: x6 i2 [15
' q, p7 T# }; C! G% Q8 ?$ O. `/ X: Z5 V+ ^
16$ n& W, v# W2 L; P
) n- Y" x: u: z( M
17
- N/ a/ W: _7 C" x, ^9 y% D0 ~! w( P: Y" g
18/ Y8 B- X8 i+ z& {0 \
( G6 F* ?0 g6 q1 U2 l
195 l' [" l4 z: j1 M8 [) P
: X) ^) |5 e. W6 O" y% k
20
: f: K+ W/ n1 E2 g# q4 S
1 u2 g( a* Y- F: \6 o; H21
, f- P2 ?- E5 t
- Y) ^, e }6 j: I1 c0 \22
6 o) b4 P% H/ j5 q6 ?) S$ _& c9 \( D; F1 K4 S) y
23) Y- z3 R& D5 ~/ r: B8 V
* K2 L5 h- v3 D) |3 O0 m* N. _
24
9 J( K8 y! {$ A4 V/ w/ u( }7 ~! m1 |- a* r y4 z7 i/ a6 k8 c) M9 g
25
4 l4 Y, D6 t7 U* P& X" A7 l9 Q! @) F8 }( X6 c+ W3 f
26, c$ r; n. g- ^! q N% [
- e: G. q. U+ W1 b# }- R
27) e: ] {7 H) P* c& B0 H L2 M
; g9 Q; B8 F" [/ X+ p28; e& k0 c0 N6 r* e$ B- P
- n7 l0 L/ R# }
29
8 i0 K- P1 ]0 }; R4 ~( a+ m3 ~ }/ D s; B- D
30
6 D; h; h& X# }* H7 c$ G! H
) v- {$ W; g5 X8 Y- e31. K. o2 }2 l& n% m
& B2 w; n+ H. ^* m% X) B
328 w! n& |' a$ C. h- A4 x5 _& S
9 ]6 t6 {, [6 w ^& c: O9 w, U! k: O
33: B( v8 i7 y8 n' d% J
! Q' m a" J$ z: ~ c
34; {; B# x7 Y4 r4 x
# x$ i5 d" c6 I35
4 ~' A( x+ x4 W, p' Q |" v% T I7 B
362 w! l5 t6 U) s+ g, v
1 x8 {' J; h2 [! w37
" s+ _! e2 b8 F4 t: ]0 O8 c" A0 N' u R; r: q1 }* |7 `# ~& m
386 _3 u$ \( m g' U; q
2 a$ w* K: S" Z b1 v! m39& m" m L4 G4 A* O+ e
; \. W* g+ e l" `
40
4 }! J# u$ u1 M( s; ~ \8 ]" M
8 T. v8 i9 L6 `7 G1 n% q6 C41
2 y, s M$ `& \
2 l! j% e8 W7 M) }& H2 q42
3 ~2 b) J; D5 F5 L# P! [$ R8 c7 o/ H+ w0 c
43
2 K5 e: o" z+ ~: N( ~1 F5 `
9 L4 B. O! H4 `5 T446 }+ Z2 U+ [% n/ w' ?5 F/ I4 a0 F
: H/ K( O7 g3 v! X+ e: N
45, }' R" K8 \- @3 [
6 A, w2 U/ F; k1 D' u& d9 T// keyword_interface_2.cs
4 I8 s1 C& H! N( T
" b; z. \! i- b# B+ M- W3 x// Interface implementation
2 f3 Z. v: t) o" n3 l. B; M/ j) u6 P" d+ A6 X
using System;
5 k: I2 L! T8 J5 o/ g7 v2 B2 {, `5 [, k$ a8 j+ E
interfaceIPoint: |' T6 s2 W7 d7 A# I# V5 r' m
" P* z, u, u! u{
' V( W( ]6 F( s, W+ Z: k u. [# w( f$ U1 T9 B
// Property signatures:( W- \. ^& Z9 K3 \+ c7 H
' a1 a5 b- z5 H! @. eint x{get; set;}
8 q3 Y$ o* V) q0 Z6 Z, @- c" G$ ~- w. k e) v6 R3 c
int y{get; set;}7 f8 |: i3 X8 @& s
0 F0 B* u( K! n M! {' p( E}
, O$ t" t0 f9 K& h0 T6 m( L! B$ d2 a
class Point : IPoint
8 ~; D; O5 m7 M% K
x; j' E: t, n/ a. _( J{
+ o6 a& t& N& w7 L8 \$ P; ?# q3 J2 L6 M) v7 b
// Fields:3 K* B/ I+ K+ ?7 X, F9 r
4 D, d) ~' ~. e: Wprivate int _x;
6 R3 m3 U+ Y* t+ @5 x i- a8 w4 \' g9 B; P; m( A
private int _y;5 T* f; R2 D& c0 {. W A
8 X, A: e$ g( f! }8 @// Constructor:' s( b5 e3 P6 P; m( p% b6 F
/ J/ t- Q4 @* Z# u
public Point(int x, int y) k6 l( ~3 l+ q# M/ Y
- C+ } K6 D: P# d X- \{9 B: r6 o/ {5 E2 [4 c
3 \$ c9 X8 _: x& |$ ~
_x = x;
4 Z8 d' S: x( F0 E- _1 ]5 S% x J* w1 Z+ U! d% V4 H3 b6 s2 ~/ ^
_y = y;8 ?1 i% `8 l+ F
& W8 Q, _0 s( D* {8 Z7 I}
% g6 A$ P" h& |
9 l! q" ]$ S$ K6 V// Property implementation:3 `# _3 I* N% d# C8 T( c, T
0 t2 m& E+ |0 ~5 D$ E# [
public int x
l* f6 r# |2 C0 f6 B3 V; j' L6 d) f, j: j/ {5 w1 m( K
{
$ O. R7 j$ N! G0 u3 Q6 ~# A0 _$ d3 a, Z5 Z6 m
get { return _x; }
4 X0 u2 W. Z, T) G" L% y
0 a8 }2 v; D0 |* {' Yset { _x = value; }
2 } X1 y$ J5 X5 P [$ X, y" \0 M) y3 c5 h6 v" S* C/ [
}
8 {4 ^; _: C2 N
# H$ W- `, B3 a, Bpublic int y& G) ]5 [* H u- |$ ?: H
& H0 N- L" O3 B4 X5 g$ p9 \
{
7 o; z( l$ t s! l, G: b2 Q W+ z9 M/ b; P# Q. ?
get { return _y; }( o. c S- T$ @
" ^3 ~+ f; |2 b4 m) M2 x. r* H$ Oset { _y = value; }
9 @5 I8 a5 \5 @3 U! Q' w0 l) ? J2 q
}$ Z: s: E. p, @9 Y5 H6 B
) U F3 P6 Q7 {8 E/ S! z4 T
}
/ T( u3 `; `- }
0 J& a, Q5 k; u l, h$ jclass MainClass
, l/ f w1 S5 U' p" g! l( x" r& B
/ e: z( f# i8 F{) K, U B& u$ c+ p; R
7 m" a0 i2 K; o) U1 j1 T# C- _: Rstatic void PrintPoint(IPoint p)2 [ {$ L6 h$ E
" ~4 e8 x5 {3 g: K5 l, b1 y
{0 G! L* w* ]3 e. @3 N8 ^2 B$ M$ J5 a
7 ~( @/ c) J6 s- M
Console.WriteLine("x={0}, y={1}", p.x, p.y);3 I% k# ^' W- Z$ F. B
" K0 K$ q, f' D}
! u" X( p9 ~) u4 y; r1 I
& W. o, ^2 W- d, D" t9 q3 j4 pstatic void Main()$ n' Z! j1 C( c$ |
( j0 U e7 q- k$ [; t. F4 V. N" z' S; m
{$ x6 \8 z; ~; q6 j2 q
0 k; F! X0 X/ b$ j" V8 Y. h$ b
Point p = new Point(2, 3);3 x2 F( q7 |/ H5 Z! J8 ^ J
7 _0 n: m5 D* n! n2 s/ k
Console.Write("My Point: ");
% |: }; g( y, {* X/ J
! _9 c3 @% }, G) E* ~9 e6 K7 gPrintPoint(p);+ d' P# t" |2 H: y: C$ E
+ D; H* L( P# V! w4 M% V7 _}
1 w' J+ B1 [+ }. W E0 D$ c
: J. h# n# F9 O! ^, R. d; R输出My Point: x=2, y=3
* Q/ `) _7 {1 c1 A! X5 D; D4 S1 A5 G" x. g
PHP中的接口; U6 k% V6 i0 Y: r4 P% I- k
/ e; ^$ v% u+ [: u0 k( f5 Jphp
) C: ~" Q) m4 \3 C1 [8 b; ?
8 `& |' Y7 [" @# P5 l% MinterfacedemoInterface{
% y; w( o" ^6 Y) ]
% N3 p( X. Z; Z% m4 X# r: F, W$ Spublic function doIt();//声明方法& E5 [- {0 N% m; M$ ^; Z/ p
% u6 f3 M, z/ G+ [}2 C& R2 ~2 W5 s6 _' g) e
5 d, c7 X- ~- Q6 a) o m! ?' |
class hello implements demoInterface{
2 X0 s% p% {3 p7 C+ R% r; P- U, i! |, d& u. B! N8 @2 R, c
public function doIt(){, @! C8 z+ \: O2 I8 \
8 ~! h m" I6 R6 A
echo "实现接口中的方法";( f& j( d- G f+ G0 G L
: e* h4 A) @3 T M! }7 ^
}
3 J% B; O8 x' H0 e+ C$ O, }/ N+ s* N7 r w
}, G6 \' w4 H9 m0 C) M, S8 @/ g( |
& F8 j/ x* }8 n9 Q$demo=new hello();
# a+ B9 I; c8 I6 q& K* [# y! o g8 ^) P8 i2 B
$demo->doIt();
! q' M* E: c/ P! U: B9 r3 H
/ A) O( p7 L5 z' ]. w?> |
|