接口与抽象类的选择
来源:互联网 发布:js控制浏览器最小化 编辑:程序博客网 时间:2024/04/26 18:46
如果要创建不带任何方法定义和成员变量的基类,选择接口而不是抽象类。
===========================================================
什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。interface的特性整理如下:
1. 接口中的方法可以有参数列表和返回类型,但不能有任何方法体。
2. 接口中可以包含字段,但是会被隐式的声明为static和final。
3. 接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。
4. 接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。
5. 当实现一个接口时,需要将被定义的方法声明为public类型的,否则为默认访问类型,Java编译器不允许这种情况。
6. 如果没有实现接口中所有方法,那么创建的仍然是一个接口。
7. 扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。
interface在某些地方和abstract有相似的地方,但是采用哪种方式来声明类主要参照以下两点:
1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。
因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。 以上就是接口的基本特性和应用的领域,但是接口绝不仅仅如此,在Java语法结构中,接口可以被嵌套,既可以被某个类嵌套,也可以被接口嵌套。这在实际开发中可能应用的不多,但也是它的特性之一。需要注意的是,在实现某个接口时,并不需要实现嵌套在其内部的任何接口,而且,private接口不能在定义它的类之外被实现。
最后写点自己的认识:
这个问题面试的时候也会很多人问起,
有过设计方面的工作内容的人和没有过类似设计的人的回答还是有所不同的,再结合一些其他类似的问题,面试官假如有心的话还是能看出来一个人之前的工作内容的状态。 最后再加上thinking in java中对接口使用原因最根本的指出:为了能够向上转型为多个基类型以及由此而带来的灵活性。 当然使用接口还有个原因是和抽象类相同的:防止客户端程序员创建该类的对象,并确保这仅仅是个建立一个接口。
所以:接口和抽象类,怎么选?当我们确定某个事物应该成为一个基类的话,接口是第一选择
java的接口与抽象类的使用很多人有过这样的疑问?
为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种。 实际上接口和抽象类的选择不是随心所欲的。 要理解接口和抽象类的选择原则,有两个概念很重要: 对象的行为和对象的实现。如果一个实体可以有多种实现方式,则在设计实体行为的描述方式时,应当 达到这样一个目标:在使用实体的时候,无需详细了解实体行为的实现方式。也就是说,要把对象的行为和对象的实现分离开来。既然Java的接口和抽象类都可以定义不提供具体实现的方法,在分离对象的行为和对象的实现时,到底应该使用接口还是使用抽象类呢? 通过抽象类建立行为模型 在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类 定义。为了说明其原因,下面试着通过抽象类建立行为模型,看看会出现什么问题。
- 接口与抽象类的选择
- 接口与抽象类的选择
- java 接口与抽象类的选择
- 抽象基类与接口,共性与个性的选择!
- PHP的抽象类与接口的区别和选择
- 如何选择抽象基类与接口
- 接口和抽象类的选择
- 接口和抽象类的选择
- 选择接口还是抽象类?---应用实例说明接口与抽象类的应用场合(区别)
- 选择接口还是抽象类?---应用实例说明接口与抽象类的应用场合(区别)
- 抽象类与接口的区别 - [ Java 接口 抽象类 ]
- 如何选择抽象基类与接口 区别
- 如何选择抽象基类与接口 区别
- 选择接口还是抽象类
- 选择接口还是抽象类
- 抽象类和接口的区别 以及选择抽象类和接口的应用场景
- PHP的抽象类、接口类的区别和选择?
- PHP的抽象类、接口类的区别和选择
- 关于如GMail等邮箱每天可发送邮件量额度的问题
- block在ARC和非ARC的内存释放
- 理解和使用蓝牙BlueZ中的FTP与PBAP协议
- ListView下拉刷新的一些常见错误
- mtk笔试题-----快速删除单链表中一个结点。时间复杂度为o(1)
- 接口与抽象类的选择
- swing jtree实现叶子节点闪动效果类似于QQ好友列表
- Internet 连接共享访问被启用时,出现了一个错误
- 提高java反射速度的方法method.setAccessible(true)
- USB gadget设备驱动解析(1) [精华]
- 设计模式Observer
- BufferReader.PrintWriter
- CnLevelEdtior0.1版本Tag一下, 小谈OgreMax
- mfc对话框中添加gif动画