接口与继承的区别???

h_x_j_gx 2007-08-05 10:19:22
如下的所示:
class C1{}
class C2 extends C1{}
interface C3{}
class C4 implements C3{}
public static void main(String arg[]){
C1 c1=new C2();
C3 c3=new C4();

C2 c2=new C2();
C4 c4=new C4();
}
我想知道的是,在上面的例子中,c1和c2有什么相同点和不同点。c1与c2在调用方法的时候有什么区别,同样c3和c4的功能是不是一样呢???
...全文
914 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
goaljueye 2010-11-11
  • 打赏
  • 举报
回复
*
C#接口的作用实例解析
* http://developer.51cto.com 2009-08-31 17:30 yuanhao 博客园 我要评论(0)

谈到C#接口的作用是我们编程学习的初级障碍,那么如何很好的理解和学习C#接口的作用呢?本文向你详细介绍了C#接口的作用的相关内容。

C#接口的作用是什么呢?首先我们来看看什么事实C#接口,C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举,当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比盖茨还聪明的人,他们的C#能添这样的多足吗?!关于接口的作用,网上有一位就真的深入浅出给我们做了很好理解的分析。

C#接口的作用解释实例:

1. public interface IBark
2. {
3. void Bark();
4. }

再定义一个类,继承于IBark,并且必需实现其中的Bark()方法

1. public class Dog:IBark
2. {
3. public Dog()
4. {}
5. public void Bark()
6. {
7. Consol.write("汪汪");
8. }
9. }

然后,声明Dog的一个实例,并调用Bark()方法

1. Dog 旺财=new Dog();
2. 旺财.Bark();

试想一样,若是想调用Bark()方法,只需要在Dog()中声明这样的一个方法不就行了吗,干什么还要用接口呢.因为接口中并没有Bark()具体实现.真的实现还是要在Dog()中.那么使用接口不是多此一举吗?

还有人是这样说的:从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束.还拿上面的例子来说.所有继承了IBark接口的类中必需实现Bark()方法.那么从用户(使用类的用户)的角度来说,如果他知道了某个类是继承于IBark接口,那么他就可以放心大胆的调用Bark()方法,而不用管Bark()方法具体是如何实现的.比如,我们另外写了一个类.

1. public class Cat:IBark
2. {
3. public Cat()
4. {}
5. public void Bark()
6. {
7. Consol.write("喵喵");
8. }
9. }

当用户用到Cat类或是Dog类的时候,知道他们继承于IBark,那么不用管类里的具体实现,而就可以直接调用Bark()方法,因为这两个类中肯定有关于Bark()方法的具体实现.

如果我们从设计的角度来看.一个项目中用若干个类需要去编写,由于这些类比较复杂,工作量比较大,这样每个类就需要占用一个工作人员进行编写.比如 A程序员去定Dog类,B程序员去写Cat类.这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于"叫"的方法.这就要对他们进行一种约束. 让他们都继承于IBark接口,目的是方便统一管理.另一个是方便调用.当然了,不使用接口一样可以达到目的.只不过这样的话,这种约束就不那么明显,如果这样类还有Duck类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些.

C#接口的作用以及相关的内容就向你介绍到这里,希望对你了解和学习C#接口的作用有所帮助。
goaljueye 2010-11-11
  • 打赏
  • 举报
回复
实现一个接口是为了更好的团队做

实现一个接口必须实现里面的所有方法

继承一个类是为的代码的可重用性

集成一个类可以不用实现里面的方法 实现你需要的方法就好了
提问人的追问 2009-12-08 22:12

更好的团队做是什么意思

回答人的补充 2009-12-09 12:57

一般一个项目是一个团队来做的

团队的队长用接口都把方法写好了

那么大家都直接用上面的方法了

不用担心上面命名冲突了
goaljueye 2010-11-11
  • 打赏
  • 举报
回复
还是不明白!
qun_yong 2008-11-05
  • 打赏
  • 举报
回复
相同点:c1有的功能,c2也有。
不同点:c2有的功能,c1没有.
c3和c4是一样。
c4实现c3
树成 2007-08-07
  • 打赏
  • 举报
回复
继承的机制是对功能的一种扩展。
例如你拿到一个类,准备用它,但是你感觉它有些不足,你需要的有些功能它可能没有,这个时候你可以继承它然后扩展它的功能。
借口的机制是一种对业务的定义和规范。
例如你在做项目的时候,你需要规定一些类实现什么样子的功能,你就要规定一些接口然后让这些类实现它。
xiaolingshi 2007-08-07
  • 打赏
  • 举报
回复
关注..............
beiouwolf 2007-08-07
  • 打赏
  • 举报
回复
其实就是范围大小的区别
你可以画个大圆圈,这个大圆圈是类

然后大园中间画个中圆,这个是抽象类,抽象类可以只有定义,也可以有实现

再中间画个小圆,这个是接口,接口只能有定义,不能有实现
asdfasdf123 2007-08-07
  • 打赏
  • 举报
回复
路过,学习``
zdmprivate 2007-08-06
  • 打赏
  • 举报
回复
class C1{}
class C2 extends C1{}
interface C3{}
class C4 implements C3{}
public static void main(String arg[]){
C1 c1=new C2(); //c1是C2创建的对象(c22)的上转型对象,相当于C1 c1;C2 c22=new C2();c1=c22;这里c1只能操作C2中继承C1的方法和成员变量,但是不能操作C2中新增加的方法和成员变量。
C3 c3=new C4(); //这个不懂,请教下面的。

C2 c2=new C2();//c2可以调用C2中的方法和成员变量,可以调用继承C1的方法和成员变量。
C4 c4=new C4();
}
lingling295 2007-08-06
  • 打赏
  • 举报
回复
学习
zzw306699675 2007-08-06
  • 打赏
  • 举报
回复
支持楼上的,接口就是一个协议,就好比你去上馆子,叫番茄蛋花汤,大排挡有大排挡的番茄蛋花汤,酒店有酒店的番茄蛋花汤
interface 番茄蛋花汤{} //菜圃
class 大排挡 implements 番茄蛋花汤{} //大排挡的番茄蛋花汤
class 酒店 implements 番茄蛋花汤{} //酒店的番茄蛋花汤

番茄蛋花汤 a = new 大排挡();
番茄蛋花汤 b = new 酒店();

a 和b就是两种不同的实现的实例,两碗番茄蛋花汤,他们都是番茄蛋花汤,你可以不用知道他是那里的,当然一个便宜一个贵:)

c1,c2,c3,c4都是引用变量,他们的类型是C1,C2,C3,C4 ,比如C1 c1=new C2(); c1这个引用变量只能访问C1中定义的成员,即C2中重写的部分,如果要访问子类中特有的方法,就会报错拉
wesrry520 2007-08-06
  • 打赏
  • 举报
回复
(1)接口可以被多重implements,抽象类只能被单一extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
mepjava 2007-08-05
  • 打赏
  • 举报
回复
接口是声明一种对象间传递消息的协议,这样可以针对接口编程而不必知道底层实现,好处就是在你底层代码发生变动时,只要接口不变就可以改变底层代码而不必改变调用者的代码

在你的例子里

C3 c3=new C4();

比如 C3接口的底层实现改变了,但是你的程序依然能正常运行
1. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量中能不能存贮一个中文汉字?为什么? 9 8、用最有效率的方法算出2乘以8等於几? 10 9、请设计一个一百亿的计算器 10 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 12 12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有什么不妥之处? 14 17、请说出作用域public,private,protected,以及不写时的区别 14 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 15 19、构造器Constructor是否可被override? 16 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、java中实现多态的机制是什么? 18 24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 22 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 23 29、super.getClass()方法调用 23 30、String是最基本的数据类型吗? 24 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 25 34、String 和StringBuffer的区别 25 35、如何把一段逗号分割的字符串转换成一个数组? 26 36、数组有没有length()这个方法? String有没有length()这个方法? 26 37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 26 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 27 39、下面的程序代码输出的结果是多少? 28 40、final, finally, finalize的区别。 30 41、运行时异常与一般异常有何异同? 30 42、error和exception有什么区别? 30 43、Java中的异常处理机制的简单原理和应用。 30 44、请写出你最常见到的5个runtime exception。 31 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 32 .... ....

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧