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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大虾挂了 中级黑马   /  2013-10-12 16:58  /  4806 人查看  /  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 个回复

正序浏览

同学给你加分了!好好学习!蔡蔡和叶叶在黑马等着你!黑马有你更精彩!快点为了当土豪努力吧!
回复 使用道具 举报
茹化肖 发表于 2013-10-21 17:42
那你看看我给你这个链接了没有。我觉得很不错的讲了接口到底有什么好处的啊 ...

看到那个连接了,我把内容都复制下来了,我住的地方没有网络,所以目前在网吧,不打算在这里看。回去会好好看的
回复 使用道具 举报
大虾挂了 发表于 2013-10-21 17:38
我没偷懒。。。。只是我真的没找到特别心仪的答案

那你看看我给你这个链接了没有。我觉得很不错的讲了接口到底有什么好处的啊
回复 使用道具 举报
茹化肖 发表于 2013-10-21 17:28
http://www.cnblogs.com/longteng1991/archive/2013/06/13/3131739.html

楼主去看看这个帖子你就知道接口 ...

我没偷懒。。。。只是我真的没找到特别心仪的答案
回复 使用道具 举报
http://www.cnblogs.com/longteng1 ... /06/13/3131739.html

楼主去看看这个帖子你就知道接口的好处是啥了。还有 帖子我给你分类已解决哦。你别偷懒以后记得回来设置 ,不然大家怎么给分啊,,,,

评分

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

查看全部评分

回复 使用道具 举报
好吧,实现多态,多继承,就这么简单,可以理解为方法的继承,就跟万能充一样,什么电池你都能拿来充电,只要这个电池实现了充电这个方法。这个过程继承是必须的,但是万一你又需要什么电池都能当板砖,没关系,在弄个接口实现当板砖的功能。这就是多继承,而类的继承只能是一个。再说说为什么非要接口,我自己调用自己的充电方法不行吗,为什么非要用接口变量调用充电方法?有时候就不行,调用方法是要知道方法名的,还要有实例什么的,引用一个外部程序集的话你是不是还要先反编译下再写代码,给你一个对象的集合,对象千奇百怪,你只要知道这些对象能干的同一件事是什么就行了,然后统一调用,而不是一个个去调。
好吧,其实我跟你一样菜,上面的东西很片面,浅显,甚至可能说法有问题。不要当真。代码自己慢慢码吧,不知道加法,能会乘法?

评分

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

查看全部评分

回复 使用道具 举报
佘显郡 发表于 2013-10-19 09:24
接口的作用上面的大能都基本说了,做为1个新人,我就想知道,楼主你怎么来的这些技术分 ...

多问一些问题,回答一些问题就好了,问的问题比较有新意,回答的问题代码详细,注释详细,肯定就有分了。不过像这种没技术含量的问题肯定是没分的,不过到现在除了报纸楼给了代码,其他人都光嘴上说,我根本没觉得用接口好在哪
回复 使用道具 举报
接口的作用上面的大能都基本说了,做为1个新人,我就想知道,楼主你怎么来的这些技术分

点评

多提问,多交流,自然就有技术分。  发表于 2013-10-20 10:40
回复 使用道具 举报
类是对象的抽象,接口是方法的抽象。

评分

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

查看全部评分

回复 使用道具 举报
因为我懂的太少了吧。希望各位大大给出类似报纸楼那样的代码,直接告诉我,用接口就是方便了。报纸楼的代码确实体现出了接口的好处,方法要求的传入参数竟然可以是接口类型的。。。。而实际传入的竟然是一个实现了这个接口的对象,确实以前不知道。
回复 使用道具 举报
aihuahuaxx 发表于 2013-10-14 15:43
如果你不接口的话,是可以实现功能,但是没有统一的定义了。

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

每个类里面的方法都是一样的名字啊,比如都用fly。用的时候都只要对象名.fly()就行了啊,哪里体现出要一个个找呢?
回复 使用道具 举报
大虾挂了 发表于 2013-10-14 12:53
你说的这个不就是我开始举的那段代码的例子么?用接口反而麻烦啊,我压根不去写接口,反正写了接口也要分 ...

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

下面的每个方法都是都是零散的,没有统一的代码名称,用的时候还要一个一个去找,没有接口的多态功能了。
回复 使用道具 举报
念念念念_、 发表于 2013-10-13 13:38
为什么要用接口????
        1、由于类不能多继承,所以在某些情况下,只能用接口来代替(接口可以多实现)
        2 ...

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

回去尝试了下,这个确实可行,算是一个接口的好处吧,不过竟然可以这么用?传参要的是一个借口类型,而实际传入的是一个实现了这个接口的类,好神奇。
回复 使用道具 举报
1.接口定义能力,即方法,由子类进行实现
2. 接口的存在就是为了实现多态
3. 接口可以解决多继承的问题
4. 接口解决了继承体积庞大的问题
5. 使用中可以将接口“当”做抽象类来使用(注意,仅仅是使用语法相似)

评分

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

查看全部评分

回复 使用道具 举报
给你举个现在很多网站都在用的一个例子:知道现在很多的网站都能用QQ,微博账号登陆本网站而不需要登陆吧!这就是用到了腾讯QQ给出的一个借口做的;
这样做我只要告诉你 接口 ,再提供几个方法就行了,不必知道里面到底是怎么实现的,也不会泄露了源码;
回复 使用道具 举报
为什么要用接口????
        1、由于类不能多继承,所以在某些情况下,只能用接口来代替(接口可以多实现)
        2、接口的主要目的是为了实现多态
        3、当多个类型,都具有某个或者几个功能的时候,但是又不是同一个系列(没有共同的父类)这个时候不能使用抽象类。所以在这时,需要实现多态,可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口
例如:飞机能飞,小鸟能飞。但是不是同属于动物类。

评分

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

查看全部评分

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

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

评分

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

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马