在java的新版本中,接口的方法使用发生了一些变化,通常来说接口中只能定义方法,这些方法是没有实现的,但是在新版本的接口中通过修饰符default与static修饰的方法可以拥有方法体。
接口中使用default或static修饰的方法都必须有方法体,也就是必须在接口中提供实现。
使用static修饰的方法可以通过接口名.方法名来调用,本质上就是一般的静态方法。
使用default修饰的方法,当一个类实现这个接口之后可以通过对象.方法名调用,类似于调用继承了的父类的非私有方法。
接口与抽象类的异同:
相同点:
- 都可以用来声明指向他的子类或实现类
- 都不可以实例化
- 都可以用来扩展类的功能
- 子类或实现类都实现实现它们之中没有实现的方法即没有方法体的方法。
不同点:
- 接口成员变量是public, static ,final的,抽象类跟普通类一致
- 接口的方法的访问修饰符只能是public的,其他修饰符可以为static,default,abstract(默认为abstract),抽象类的方法访问修饰符与普通方法一致。抽象类可以没有抽象方法,有抽象方法的一定是抽象类
- 接口不能定义构造方法,抽象类可以有构造方法,但并不是用来实例化的,是给子类调用用来实例化的
- 接口不能有初始化块,抽象类可以有初始化块
- 接口可以继承(extends)多个接口,抽象类跟普通类一样只能继承一个类
目前用接口与抽象类开发的一些好处有:
面向接口编程可以帮我们理清思路,把程序大概的运行方式搭建出来,之后再把功能一个个完成。运用接口与抽象类时,如果要对接口或抽象类的方法进行扩展,那么继承了这些抽象类或实现了这些接口的类就会报出错误,强制子类实现,让人容易修改不易遗漏。
方法的参数可以使用接口与抽象类而无需指定具体的实现类,只要实现了相应的接口或者继承了相应的类就可以使用这个方法。