接口和抽象类的区别
比较点 | 抽象类 | 接口 |
---|---|---|
默认方法 | 抽象类可以有默认的方法实现 | java 8之前,接口中不存在方法的实现 |
实现方式 | 子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现 | 子类使用implements来实现接口,需要提供接口中所有声明的实现. |
构造器 | 抽象类中可以有构造器 | 接口中不能 |
和正常类区别 | 抽象类不能被实例化 | 接口则是完全不同的类型,更不用谈被实例化(只有类才可以被实例化为对象) |
访问修饰符 | 抽象方法可以有public,protected和default等修饰 | 接口默认(只能)是public,不能使用其他修饰符 |
继承 | 一个子类只能存在一个父类(单继承) | 一个子类可以存在多个接口(多继承) |
添加新方法 | 抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码 | 如果往接口中添加新方法,则子类中需要实现该方法 |