java中抽象类和接口的区别
2015-12-29 12:20
253 查看
简单来说, 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。动物类要有呼吸方法。怎么呼吸就是子类的事了。现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像JAVA王子所说的事件中的适配器就是一个很好的应用。用一个简单的例子,比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩展自己的行为body。从这点意义上来说, interface偏重于行为。总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。
由于这样的文字解释简洁明了,特转载分享。。
相关文章推荐
- java的同步方法异步处理
- Spring 缓存及 第三方缓存接入
- java调用so库
- Huffman编码 java版
- JAVA 几种多线程的简单实例 Thread Runnable
- 更新系统或者更换Eclipse后,双击Eclipse-drawable,或者在布局文件中,查看图片时,显示乱码。png 和 jpg
- java 打jar包和运行jar
- JAVA Socket实现多客户端聊天
- BM算法 java代码
- 用来比较的java接口,Comparator 和 Comparable
- java+ajax实例
- 详细的java(GC)原理
- Java继承中属性、方法和对象的关系
- Spring MVC静态资源处理
- Java基础类Class使用指南
- org.eclipse.swt.SWTError: No more handles的解决办法
- 【spring-security】InMemoryDaoImpl在spring-security4.x版本不存在
- Winform客户端到Java服务端的图片展示和上传
- myeclipse中修改文件打开方式
- C#和java的图片上传和展示