Java abstract class 和 interface 的区别
2016-09-29 17:05
381 查看
Java abstract class 和 interface 的区别
1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制
2. 以Door的抽象概念为例,门一般有open和close动作,如果只有这些,通过abstract class或者interface来定义都可以,看起来没问题。
3. 但是Door应该还有一些抽象的属性,比如状态,大小、形状、材质等,这些放在interface定义里就不合适了(注:interface的成员变量必须是public static final的),应该用abstract class来定义,所以对同一类事物/问题域的抽象化定义应该用abstract class,比如鸟类、形状等。
4. 我们再想想,如何做一个有报警功能的AlarmDoor类,在abstract class里加alarm()方法不太合适吧,因为不是所有的门都有报警功能,也不能再定义Alarm的abstract class,因为Java不允许多重继承,这里应该用interface来定义,AlarmDoor实现IAlarm接口就可以了。所以对一个具体的类要实现某些新功能,可以通过interface来标准化。标准化的IAlarm接口还可以给其他需要报警功能的类使用,比如AlarmWindow。
1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制
2. 以Door的抽象概念为例,门一般有open和close动作,如果只有这些,通过abstract class或者interface来定义都可以,看起来没问题。
3. 但是Door应该还有一些抽象的属性,比如状态,大小、形状、材质等,这些放在interface定义里就不合适了(注:interface的成员变量必须是public static final的),应该用abstract class来定义,所以对同一类事物/问题域的抽象化定义应该用abstract class,比如鸟类、形状等。
4. 我们再想想,如何做一个有报警功能的AlarmDoor类,在abstract class里加alarm()方法不太合适吧,因为不是所有的门都有报警功能,也不能再定义Alarm的abstract class,因为Java不允许多重继承,这里应该用interface来定义,AlarmDoor实现IAlarm接口就可以了。所以对一个具体的类要实现某些新功能,可以通过interface来标准化。标准化的IAlarm接口还可以给其他需要报警功能的类使用,比如AlarmWindow。
相关文章推荐
- 对JAVA集合进行遍历删除时务必要用迭代器
- 聊聊并发(三)——JAVA线程池的分析和使用
- Java数据类型转换(自动转换和强制转换)
- java中反射的三种方法
- Java API 1.8源码--【集合类 collection】
- Spring-MVC第一弹简单项目搭建
- Java API 1.8源码--【集合类 collection】
- 使用java语言实现各种排序算法
- Spring Boot中使用Swagger2构建强大的RESTful API文档
- 使用springfox整合SpringMVC和Swagger
- Spring Security3 - MVC 整合教程 (初识Spring Security3)
- 增强for循环和普通for循环的区别
- JavaMail--基础类详解
- Struts2-类型转换器-Converter
- 监控和管理生产环境spring boot actuator
- JavaMail发送和接收邮件
- java语言复制数组的四种方法
- Spring.net 后处理器 可用来切换实例
- java编程基础
- 轻松掌握java装饰者模式