接着上面人类的例子说,抽象类和借口他们之间有啥区别,有些人说2个不一样么,只不过抽象类中能实现一些成员方法罢了,那么是否在设计的时候抽象类和借口有冲突呢??大家可以去看看《大话设计模式》 恩,上面的例子还不能说明什么,那接着说。抽象,顾名思义就是对一个东西的描述,就像liuh6说的接口是can do 抽像是is a 陈广的概述!~ 你要问了,凭什么?先来了解下抽象类和借口他们定义上的区别,抽象类可以给出一些成员的实现,而接口却不可以,必须要子类去完全实现,这里都懂是不?从这一点我们可以看出,就像前面举的例子,人类都有一些共性的,眼睛嘴巴眉毛,人的体态,就像在描述人类一样,一些共性的东西完全可以直接实现它,然后子类去继承后就说明这个子类有人类的特征了,然后具体这个子类是本拉登还是布什就要你在子类中具体实现了。所以我们要用抽象类去封装这个人类基类。
接口 定义一组契约。继承它的类必须实现接口的方法。继承接口的类和接口是 Can Do 的关系。抽象类还是类,里面有抽象方法。 继承它的类,必须重写(override)抽象类的抽象方法。 抽象类和继承它的类之间是 IS A 的 关系。接口是能做什么抽象类是继承关系(继承它的类 覆盖 抽象类的抽象方法)多态的时候,要考虑用接口还是抽象类。
接口 就相当于制定了一份合同,继承它的类必须遵守。抽象类说到底,还是IS A 继承关系。接口一旦制定了,将来更改接口,继承它的类,就必须更改。抽象类就灵活一些,可以加个方法不影响继承它的类。
报谦!笔误顶楼上说的很生动,接口是can do 抽像是is a 陈广的概述!~
恩,上面的例子还不能说明什么,那接着说。抽象,顾名思义就是对一个东西的描述,就像liuh6说的接口是can do 抽像是is a 陈广的概述!~ 你要问了,凭什么?先来了解下抽象类和借口他们定义上的区别,抽象类可以给出一些成员的实现,而接口却不可以,必须要子类去完全实现,这里都懂是不?从这一点我们可以看出,就像前面举的例子,人类都有一些共性的,眼睛嘴巴眉毛,人的体态,就像在描述人类一样,一些共性的东西完全可以直接实现它,然后子类去继承后就说明这个子类有人类的特征了,然后具体这个子类是本拉登还是布什就要你在子类中具体实现了。所以我们要用抽象类去封装这个人类基类。
规范,
(快乐乔巴) 是个好同志,比只抛出一个连接,尤其是直接贴msdn的(这还用你帖?不如直接告诉他接口就是interface算了),还有全是代码而且很大例子的那种要强的多,何为新手?人家就是那边看了没看懂才来问的,又给抛回去了有什么意义,用自己的理解生动的给新同志答疑解惑一番,对自己也是个巩固有什么不好,这才是这个论坛开设的意义,换句话说,如果看不起那问题,懒得给他废话,没有诚意认真答复,就不要回帖,楼主应该把分全给chopper7278(快乐乔巴)
{
bool 漂亮;
bool 体贴;
bool 做饭好吃;
bool 会织毛衣;
}作为接口的使用方,你可以写下 FindAGirlFriend 函数如下:
// 十有八九返回null
IGirl FindAGirlFriend(IList<IGirl> girls)
{
foreach(IGirl g in girls)
{
if (g.漂亮 && g.体贴 && g.做饭好吃 && g.会织毛衣)
{
return g;
}
}
return null;
}与此同时,IGirl 的实现方正在紧锣密鼓的实现它,有个人写了一个 LazyGirl 类,另一个人写了一个 UglyGirl 类,还有一个人写了一个 StupidGirl。接口的一个好处是,你不用等这些类写好以后再写 FindAGirlFriend 函数。使用方和实现方可以同时工作。
接口是一个特殊的类 是最抽象的 里面可以有属性方法索引器,成员不需要访问修饰符 默认为public
那定义偶可不知道如果问定义还是去BAIDU吧
乔巴,你做coder浪费人才列~~~
说的很生动、好理解
Mark
契约,规范
就好比银行卡的银联,不管工商银行,农业银行都有银联的标志是吧,你如果拿了个没有银联的卡多不方便,这个银联就是接口,只要你继承它的借口实现银联这个功能,走到哪人家都认阿。
接口还能多继承,就像人不是每一个人的能力都一样吧,比如咸蛋超人,和普通人有啥区别?会飞是不,普通人会吗?就像一个特殊能力,这时候你可以利用到接口了,普通人的类继承一个会飞的接口,并实现飞的方法,那么这个人就是咸蛋超……