Java8新特性之接口的默认方法与静态方法+抽象类和接口的区别

Java8新特性--接口的默认方法与静态方法

Java8用默认方法与静态方法这两个新概念来扩展接口的声明
在这之前先来复习下接口,就拿它和抽象类的区别来说吧:
1、设计层面上:抽象类是对事物的抽象,包括事物的属性方法在内,而接口是对行为的抽象仅限于 事物的行为。
举例飞机和鸟都有飞的行为,可以把飞机和鸟都定义成类。而飞是个行为而不是一个对象所以不能定义成类而只能定义成接口,让飞机和鸟都来实现这个接口来实现它飞的行为。
而鸟和飞机都表示的是一种类型,鸟可以有很多种类,飞机也可以有很多种类,而这些具体的类只要继承鸟类或者飞机类,就可以实现种类特有的行为属性和行为。
从此可以看出接口是“有没有”的关系而抽象类是“是不是”的关系。
2、语法和使用上:
抽象类中可以有普通方法也可以有抽象方法而接口中方法只能是public abstract
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是pubic static final类型的
抽象类中可以有静态方法以及静态代码块,而接口中不能有静态方法和静态代码块
一个类可以实现多个接口但是只能继承一个抽象类
一个类实现接口的话就必须实现接口中所有的方法而继承抽象类的话不一定要全部实现

默认方法;Java8允许在接口中增加默认方法,默认方法在实现类中可以不去实现它,但是如果接口中有默认方法,实现类将默认的去继承这个默认方法,当然如果有需要的话可以在实现类中覆盖抽象方法,所以很容易得出默认方法的使用方式:用实现类的实例来直接点出这个默认方法。

静态方法:允许在已有的接口中增加静态方法,需要提供方法的实现。静态方法属于接口本身,不被实现类所继承。所以说静态方法和普通的静态方法使用方式相同,直接使用接口的类名点方法名。
示例代码:

编译没出错,证明静态方法和默认方法都不需要实现



访问成功!上述说过默认方法可以在实现类中覆盖,继续操作。


所以在Java8之后接口这方面还是改变挺大的,刷新了之前版本中的接口中的方法只能是abstract方法这个观点。
相信细心的朋友已经发现在上述介绍接口和抽象类的区别的时候有红色字体出现,而这些正是Java8之后回答上述问题的突破口。
以上纯属个人观点,如有不妥欢迎批评指正。