A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大虾挂了 中级黑马   /  2013-10-12 16:58  /  4805 人查看  /  27 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写个简单的例子
Interface Ifly
{
void fly();
}

class Person:Ifly
{
public viod fly()
{
Console.WriteLine("Person can fly!!!");
}
}

class Animal:Ifly
{
public viod fly()
{
Console.WriteLine("Animal can fly!!!");
}
}

上面这段代码比这段代码的优势在哪?
class Person
{
public viod fly()
{
Console.WriteLine("Person can fly!!!");
}
}

class Animal
{
public viod fly()
{
Console.WriteLine("Animal can fly!!!");
}
}
把接口声明内容和类后面的:接口 部分去掉不就是这段代码么。

比如都实例化一个人和动物
Person p=new Person();
Animal a=new Animal();
当我们使用p.fly();和a.fly();时候,只不过前者认为p和a都是实现了Ifly接口中的fly(),而后者直接认为调用的是不同类中的fly()函数。

网上说使用接口可以让大型项目开发变得简单。还是那上面人和动物会飞这个例子。写人这个类的程序员只需把人这个类的相关东西写完,然后留一个会飞的接口。具体这个会飞的接口是怎么写的,是另一个人负责的。可是明显不是这样的啊。写人这个类的程序员不是必须要把接口的每个成员都实现么?相反,那个写会飞这个接口的程序员可真是闲的不行!这不科学啊!!!!!

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

27 个回复

倒序浏览
能不能有个简单的例子,告诉我,这个时候,接口就是好!!!!不用接口就是麻烦!!!!
回复 使用道具 举报
为什么会有接口这一概念?
     由于C#中的类不支持多重继承 而客观世界出现多重继承的情况又比较多!为了避免传统的多继承给程序员带来的复杂性等问题      

    多继承!!!!

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报 1 0
§風過無痕§ 发表于 2013-10-12 18:01
为什么会有接口这一概念?
     由于C#中的类不支持多重继承 而客观世界出现多重继承的情况又比较多!为了 ...

能不能给段简单的代码,说明用接口要比把接口去掉,把接口函数直接当做类自身函数要简单呢?实在不懂接口的好处
回复 使用道具 举报
  1.     interface IFly
  2.     {
  3.         void fly();
  4.     }
  5.     class Person : IFly
  6.     {
  7.         public void fly()
  8.         {
  9.             Console.WriteLine("Person can fly!!!");
  10.         }
  11.     }
  12.     class Animal : IFly
  13.     {
  14.         public void fly()
  15.         {
  16.             Console.WriteLine("Animal can fly!!!");
  17.         }
  18.     }
  19.     class Program
  20.     {
  21.         //
  22.         public static void FlyAction(IFly myfly)
  23.         {
  24.             myfly.fly();
  25.         }
  26.         static void Main(string[] args)
  27.         {
  28.             Person person = new Person();
  29.             Animal animal = new Animal();
  30.             //当你定义了这个方法的时候,你是不是看到了接口的好处
  31.             FlyAction(person);
  32.             FlyAction(animal);
  33.             Console.ReadKey();
  34.         }
  35.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报

可以这么写么?FlyAction方法传入参数是一个接口类型的?
后面你实际给他传的是一个i实现了这个接口的类?
好神奇。。。。。没VS,我把这段代码记下了,回去跑跑看
回复 使用道具 举报

可以这么写么?FlyAction方法传入参数是一个接口类型的?
后面你实际给他传的是一个i实现了这个接口的类?
好神奇。。。。。没VS,我把这段代码记下了,回去跑跑看
回复 使用道具 举报

可以这么写么?FlyAction方法传入参数是一个接口类型的?
后面你实际给他传的是一个i实现了这个接口的类?
好神奇。。。。。没VS,我把这段代码记下了,回去跑跑看
回复 使用道具 举报
haxyek 金牌黑马 2013-10-12 22:46:43
9#
接口一个作用是统一命名规则,比如CF
不同类型的枪开火显示出来的效果不同,
可能程序员A开发来福枪,程序员B开发沙鹰,枪都有一个动作开火,如果程序员A和程序员B在开火这个动作命名有差别。比如程序员A:来福开火,程序员B:开火。
那么在实际使用上会造成不必要的麻烦。
比如实例化了一个枪,想调用“开火”这个动作就必须要知道它里面的方法名是开火,还是来福开火。
如果用接口,那么可以统一命名。
而接口命名规则是这样:IFly 这个接口就代表他里面有个Fly()的方法(I代表接口)。这样直接能从接口名看出里面的方法。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1 淡定

查看全部评分

回复 使用道具 举报
haxyek 发表于 2013-10-12 22:46
接口一个作用是统一命名规则,比如CF
不同类型的枪开火显示出来的效果不同,
可能程序员A开发来福枪,程序 ...

枪也是要实现开火接口的么?还是说只要在来福枪和沙鹰枪里面实现开火接口,然后就可以实例化一个枪A=new 来福枪(),而直接用A.fire() 么。我回去试试看。
回复 使用道具 举报
为什么要用接口????
        1、由于类不能多继承,所以在某些情况下,只能用接口来代替(接口可以多实现)
        2、接口的主要目的是为了实现多态
        3、当多个类型,都具有某个或者几个功能的时候,但是又不是同一个系列(没有共同的父类)这个时候不能使用抽象类。所以在这时,需要实现多态,可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口
例如:飞机能飞,小鸟能飞。但是不是同属于动物类。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
给你举个现在很多网站都在用的一个例子:知道现在很多的网站都能用QQ,微博账号登陆本网站而不需要登陆吧!这就是用到了腾讯QQ给出的一个借口做的;
这样做我只要告诉你 接口 ,再提供几个方法就行了,不必知道里面到底是怎么实现的,也不会泄露了源码;
回复 使用道具 举报
1.接口定义能力,即方法,由子类进行实现
2. 接口的存在就是为了实现多态
3. 接口可以解决多继承的问题
4. 接口解决了继承体积庞大的问题
5. 使用中可以将接口“当”做抽象类来使用(注意,仅仅是使用语法相似)

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报

回去尝试了下,这个确实可行,算是一个接口的好处吧,不过竟然可以这么用?传参要的是一个借口类型,而实际传入的是一个实现了这个接口的类,好神奇。
回复 使用道具 举报
念念念念_、 发表于 2013-10-13 13:38
为什么要用接口????
        1、由于类不能多继承,所以在某些情况下,只能用接口来代替(接口可以多实现)
        2 ...

你说的这个不就是我开始举的那段代码的例子么?用接口反而麻烦啊,我压根不去写接口,反正写了接口也要分别在小鸟和飞机的类中详细些全fly()这个函数。我不写接口,一样也是在两个类中分别写fly()函数,这样不是更简单么?
只不过你写接口以后,使用小鸟或者飞机.fly()的时候认为你是调用的接口的能力,我不写接口认为调用的每个类中自己的fly()函数。
回复 使用道具 举报
大虾挂了 发表于 2013-10-14 12:53
你说的这个不就是我开始举的那段代码的例子么?用接口反而麻烦啊,我压根不去写接口,反正写了接口也要分 ...

如果你不接口的话,是可以实现功能,但是没有统一的定义了。

下面的每个方法都是都是零散的,没有统一的代码名称,用的时候还要一个一个去找,没有接口的多态功能了。
回复 使用道具 举报
aihuahuaxx 发表于 2013-10-14 15:43
如果你不接口的话,是可以实现功能,但是没有统一的定义了。

下面的每个方法都是都是零散的,没有统一的 ...

每个类里面的方法都是一样的名字啊,比如都用fly。用的时候都只要对象名.fly()就行了啊,哪里体现出要一个个找呢?
回复 使用道具 举报
因为我懂的太少了吧。希望各位大大给出类似报纸楼那样的代码,直接告诉我,用接口就是方便了。报纸楼的代码确实体现出了接口的好处,方法要求的传入参数竟然可以是接口类型的。。。。而实际传入的竟然是一个实现了这个接口的对象,确实以前不知道。
回复 使用道具 举报
类是对象的抽象,接口是方法的抽象。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
接口的作用上面的大能都基本说了,做为1个新人,我就想知道,楼主你怎么来的这些技术分

点评

多提问,多交流,自然就有技术分。  发表于 2013-10-20 10:40
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马