Interface一般在继承中作为一个类系的基础,他们只定义操作但不定义实现,也就是告诉说这个类系中所有的类实现了这个接口的类都能支持这些操作
解决方案 »
- 【求教】JAVA LIST 列出前三项
- 如何释放panel上添加的控件的内存?
- c/s结构,Swing和socket的传输的问题和加载图片能够点击动态执行的问题(在线等)
- 关于进度条在文件拷贝应用中的一些问题 请各位高手拉小弟一把!!
- jTable单元格中如何嵌入JList列表
- 日期格式的解析问题
- 使用dom4j读取xml文档时,老是报以下错误!
- 怎么得到PreparedStatement对象executeQuery()函数所返回的结果集行数??
- 请问各位在在配制apache跟modssl是要一个ApacheModuleSSL.dll请给一个 急用?100感谢
- 关于JB如何使用VisualAge导出的包
- 如何获得系统时间?
- 初学者请教
为了要实现多继承,他用了接口这种只提供类方法名(调用入口)
不提供方法实现的一种纯虚类。至于为什么要这样用,这个牵涉到面向对象的方法的基本概念。这里不细说
weimenren(愚人碼頭(每天进步一点)) :你说的这点我是知道的,只是不明白实际应用中有什么好处呢? 实在是糊涂了~~
面向对象的语言未必都好,Interface到底好还是不好,他还不完全符合我们自然语言习惯,也许在将来就会没有这个概念。
就像GOTO已经离我们逐渐远了。
接口使其调用接口的一边不用知道另一边是什么东西,怎样实现的,只要知道如何调用接口就行。而实现接口的一边也不用知道另一边是什么东西,只要知道实现接口就行。
这就很好的实现了OO中的封装性(而类继承则破坏了封装性,这就引起了广泛的争论,在此就暂不下定论,主要看实际中自己的把握来积累经验)。
举个形象的例子,假如说,未来的车子只要听到声音'启动',就会启动,听到'目的地 A',就会自动开到目的地A,那么不管什么人都能开车了,包括盲人,哑吧。而且考驾照也就很容易了,且只用考一个驾照,不用现在的什么A、B、C、D、E...那么多,就可以开所有的车子,包括卡车,轿车,摩托车。
虽然这在现在是个幻想,但在程序中可就轻松可以实现了,在程序中充分运用接口,按照可复用的设计方法,就可以美妙的解决很多类似的问题
例,子继承了父,也继承了母,如不使用接口怎么写?java只有单继承。所以就要使用接口来实现。class son extends father implements mather
{}
1、纯抽象类。
2、多重继承。
这个东西在java中进一步展开还可以讨论出很多东西,这里不详述。
描述一种has a的关系。接口只是告诉你这个接口有这个能力,而没有具体提供实现。类继承:
描述一种is a的关系。类继承的时间不光继承接口还继承实现。
接口相对于类继承是十分容易理解的。这里有一个十分容易而又可以区分二者的方法类继承是一种对实现的继承
子类必定要包含了或者重载了父类的每一个方法。这通常代表着是“某类的一员的关系”A Beagle IS A Dog.
小猎犬也是一种狗接口继承有一点点不同。它更加想一种特性,一般用来指示对象有某种特性。如果你继承了接口,你就要自己做出这些特性的实现。一个接口是表现了对象能做什么,不表示对象是某种现实存在的东西的一个分类。小猎犬也会“吠”的,所以他有会乱叫的特性使用接口的其中一条理由是在版本升级的时候。
对祖先类的任何改变都将改变它的子类。
在使用接口继承的时候,你可以使用多重接口降低这个问题造成的影响。在使用接口的时候,自类只能看到父接口,但是没有实现,实现要自己做。
我认为,从OO角度来看,接口不能说继承,应该说实现,其它认识和你据说相同。
在这里,很多人把接口说成主要是为了多继承,我觉得有些问题,严格来说,如上所说,接口不能说继承。而且如果说接口是为了实现多继承,那直接让类实现多继承算了,为何要发明一个'接口',让它来做呢?这不是多此一举吗?当然不是,多继承是OO中的大忌,所以java和Delphi都禁止了多继承。
在OO中不用多继承来解决问题,而是用'接口'的思想,所以有些人就以为'接口'就是实现多继承,而实际上接口是另一种设计思想,大家可以看看weimenren(愚人碼頭(每天进步一点)的举例或多看一些OO和设计模式的书来了解这一点。
在设计模式中,它起了很重要的作用。
具体的模式我也搞不清楚了,好像是adaptor模式吧,当然名称不是关键。
我简单的说说他的作用。理论地说:它实现了OO得多态性。
多态性究竟是什么?
多态性,我觉得实现的就是,在高层,你不关心如何去实现某件事情
你只规定,做一件事情必须要具有几个步骤(方法),而具体怎么作
在这几个步骤中又调用了什么,这些都是由实现类自己作。这种性质,在通用事务处理中相当重要。
没有多态的情况下
一个控制程序,处理相同性质不同实现的业务,必须写无数个
switch ...case...
这种情况可维护性很差。
如果有了接口,我的控制程序只要接受接口类型,所有业务在作完之后
结果都上构成接口(这就是upcasting),那么控制程序就可以实现通用
处理。以后有新业务,也只需要按照接口标准来作就够了。这样说不知道清楚否
在一定程度上解决了多继承问题,但interface无属性无继承性
,有抽象性,只提供待实现的抽象(契约),使实现与界面分离。
接口是什么?本质上他就是一个方法名和指针的列表。其实我们平时建立的封装也就是实现了一个接口。也就是在这个列表里填写上了方法的程序段的指针。而继承就是使用两级列表,或者多级列表(程序源代码里面每各类应该只有一个列表)。而每一个列表就是一个接口。 所以接口在c++里面就已经存在,只是c++允许程序员实现这些接口(就是填写如方法程序段的指针),就叫做多继承。 站在高层来说,多继承或者说,java的接口机制,使到同一个对象拥有了多重的递属关系,在编写大型而复杂的程序的时候可以实现单继承关系图所无法实现的功能。 java出于降低软件设计复杂度的考虑,没有允许程序员实现接口。这样逻辑上接口就不是继承关系图里面的一部分。继承关系图就简化了。
多重继承是不良设计,所以java和delphi已经禁止
接口不是为了实现多重继承,它是另一种的设计思想
在OO设计中,有两种关系要注意区别:
包含:是has a的关系
继承:是is a的关系
要仔细看看weimenren(愚人碼頭(每天进步一点)的举例