抽象类和接口的区别
抽象类
- 抽象类是用来捕捉子类的通用特性,不能被实例化,只能作为子类的超类。抽象类是用来创建继承级子类的模板。
接口
- 接口是抽象方法的集合,如果一个类实现了接口,就必须要实现接口中所有的抽象方法。接口只是一种形式,接口本身不能做任何事情。
抽象类和接口的对比
参数 | 抽象类 | 接口 |
---|---|---|
默认对的方法实现 | 抽象类可以有默认的方法实现 | 接口的方法完全是抽象的,不能有方法的实现 |
实现 | 子类通过extends继承抽象类,如果子类不是抽象类,则必须提供抽象类中所有声明方法的实现 | 通过implements实现接口,需要提供所有接口中声明方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
和正常java类的区别 | 除了不能实例化之外,和普通java类没有区别 | 和普通java类是完全不同的类型 |
访问修饰符 | 抽象类中抽象方法可以使用public、protected、default这些修饰符 | 接口中抽象方法默认public,这也只能使用public |
mian方法 | 抽象类类中可以有main函数直接运行 | 接口中没有main函数 |
多继承 | 抽象类可以继承一个类和实现多个接口 | 接口中只可以继承一个类或者实现多个接口 |
速度 | 抽象类速速比接口要快 | 接口速度要慢一些,因为他需要花时间去寻找在类中实现的方法 |
添加新方法 | 在抽象类中添加新方法,在提供默认实现之后不需要修改现在的代码 | 在接口中添加新方法,则必须去修改实现他的类 |
使用抽象类和接口的情景
- 如果你想要使用一些抽象方法和一些默认的实现,那么用抽象类。
- 如果想要多继承,则必须使用接口,因为在java中不支持多继承,但可以多实现。
参考:http://www.importnew.com/12399.html