Java中的抽象类与接口
2015-08-03 00:00
225 查看
抽象类
抽象类是由abstract修饰的类,并且一定包含有用abstract修饰的方法,也就是抽象方法,当一个类中有抽象方法的时候,这个类一定要被定义成抽象类。
抽象类中也可以没有抽象方法。
抽象类除了有抽象方法,其它的与普通的类没什么区别。
当抽象类作为父类被子类继承时,子类必须实现抽象类父类中的抽象方法,如果没实现的话,则必须将子类也定义为抽象类,父类不为抽象类时,子类也可以为抽象类。
抽象类不能用new操作符来初始化,但是可以定义它的构造方法
接口
接口是一种与类相似的结构,只包含常量和抽象方法,即接口中出现的数据是常量,默认为public static final定义的,方法默认为abstract,可以不写。
一个接口可以扩展一个或多个接口。
一个类只能继承一个类,但是能实现多个接口,从而实现多继承。
接口也不能用new操作符来初始化。
区别
设计指南
抽象类和接口都是用来明确多个对象的共同特征的。一般来说,详细描述父子关系的强是关系(strong is-a relationship)应该用类建模。例如,因为公历是一种日历,所以,类java.util.GregorianCalendar和java.util.Calendar是用类继承建模的。弱是关系(weak is-a relationship)也称为类属关系(is-kind-of relationship),它表明对象拥有某种属性。弱是关系可以用接口来建模。例如,所有的字符串都是可比较的,因此,String类实现Comparable接口。
抽象类是由abstract修饰的类,并且一定包含有用abstract修饰的方法,也就是抽象方法,当一个类中有抽象方法的时候,这个类一定要被定义成抽象类。
抽象类中也可以没有抽象方法。
抽象类除了有抽象方法,其它的与普通的类没什么区别。
当抽象类作为父类被子类继承时,子类必须实现抽象类父类中的抽象方法,如果没实现的话,则必须将子类也定义为抽象类,父类不为抽象类时,子类也可以为抽象类。
抽象类不能用new操作符来初始化,但是可以定义它的构造方法
接口
接口是一种与类相似的结构,只包含常量和抽象方法,即接口中出现的数据是常量,默认为public static final定义的,方法默认为abstract,可以不写。
一个接口可以扩展一个或多个接口。
一个类只能继承一个类,但是能实现多个接口,从而实现多继承。
接口也不能用new操作符来初始化。
区别
变量 | 构造方法 | 方法 | |
抽象类 | 无限制 | 子类通过构造方法链调用构造方法,抽象类不能用new操作符实例化 | 无限制 |
接口 | 所有的变量必须 是public static final的 | 没有构造方法,接口不能用new操作符实例化 | 所有的方法必须是公共的抽象实例方法 |
抽象类和接口都是用来明确多个对象的共同特征的。一般来说,详细描述父子关系的强是关系(strong is-a relationship)应该用类建模。例如,因为公历是一种日历,所以,类java.util.GregorianCalendar和java.util.Calendar是用类继承建模的。弱是关系(weak is-a relationship)也称为类属关系(is-kind-of relationship),它表明对象拥有某种属性。弱是关系可以用接口来建模。例如,所有的字符串都是可比较的,因此,String类实现Comparable接口。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统