Java开发abstract 和 interface的区别

java开发里面经常会用到虚函数和接口,这两者的区别是什么呢?

abstract: 子类里面只能继承一个父类

interface: 子类可以实现多个接口

那什么时候用abstract,什么时候用interface呢?

当某个子类和父类是 is a关系时,比如一个亚洲人是一个人,那么一个亚洲人的子类可以继承一个人的父类。

当子类和父类是like a关系时,比如一个美洲超人像一个超人,超人的能力不是每个人都有的,所以不是所有人的属性,我们不能把超能力归于人的父类,这时就可以用interface

代码例子:

public abstract class Man {
public abstract void eat();
} public interface SuperPower {
public void superPower();
} public class AsiaMan extends Man {
@Override
public void eat() {
System.out.println("亚洲人用筷子吃");
}
} public class AmericanSuperMan extends Man implements SuperPower {
public void superPower() {
System.out.println("美国超人会飞");
}
@Override
public void eat() {
System.out.println("美国人用刀叉吃");
}
} public static void main(String[] args) { Man anAsiaMan = new AsiaMan();
AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan(); anAsiaMan.eat();
anAmericanSuperMan.eat();
anAmericanSuperMan.superPower();
}

运行结果:

美国人用刀叉吃

美国超人会飞

亚洲人用筷子吃

正确的使用abstract和interface有利提高代码可读性,当人们看到extend时就会知道这是一个is a什么,看到implement时可以知道这个类有什么特性like a

最新文章

  1. [linux]阿里云主机的免登陆安全SSH配置与思考
  2. Linux中profile、bashrc、bash_profile之间的区别和联系
  3. myaudio.duration为null的解决办法
  4. 在Microsoft-IIS/10.0上面部署mvc站点的时候,出现404的错误
  5. EL表达式,JSTL:jsp standard Tag Library
  6. 手把手教你使用 Imagepro plus - 宏操作【转】
  7. [状压dp]HDU3001 Travelling
  8. 如何使用JSONP
  9. mapreduce程序来实现分类
  10. LeetCode Merge k Sorted Lists 解决报告
  11. ASP.NET WebForm路由模拟
  12. 自学Unity3D 之 贪吃蛇
  13. [javascript]一段焦点图的js代码
  14. 摘选改善Python程序的91个建议
  15. File 与 FileStream 文件运用
  16. Nginx 配置文件解析
  17. 块结构在文件中的表示IOB【转载】
  18. 7 python 类的组合
  19. Windows10和CentOS7双系统安装的一些小技巧
  20. 如何用 LaTeX 撰写博士学位论文?

热门文章

  1. CSV.js – 用于 CSV 解析和编码的 JS 工具库
  2. EpicEditor – 可嵌入的 JavaScript Markdown 编辑器
  3. Java2_J2EE、J2SE和J2ME的区别
  4. windows 端口 任务
  5. sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)
  6. Javascript - Arraylike的7种实现
  7. SPS中JSOM和SOAP 实现文件上传
  8. git 和 github 关系?
  9. Android 加载大图片到内存
  10. Palo(OLAP database)–MOLAP