文章目录
- 一、接口
- 匿名实现类、匿名对象
- 练习1
- 练习2
- JDK8接口的新特性
一、接口
1、接口使用interface定义
2、Java中接口和类是并列结构
3、如何定义接口——定义接口中的成员
JDK7之前:只能定义全局常量和抽象方法
全局常量:public static final的(这里的意思是这三个词一起定义的后面的内容),但是书写时可以省略不写
抽象方法:public abstract的
JDK8:除了定义全局常量和抽象方法外,还可以定义静态方法和默认方法
4、接口中不能定义构造器!意味着接口不可以实例化
5、Java开发中,接口通过让类去实现(implements)的方式来使用
如果实现类覆盖了接口中所有的抽象方法,则此实现类就可实例化。
如果实现类没有覆盖了接口中所有的抽象方法,则此实现类仍未抽象类。
6、Java类可以实现多个接口,弥补了单继承性的局限性
格式: class A extends B implements C,D,E
7、接口与接口之间可以继承,而且可以多继承
格式:interface A extends B,C
8、接口具体的使用,体现多态性
本来com.transferData()中应该写的是com.transferData(Usb usb),但是Usb是个接口,不能进行实例化,所以需要使用多态,也就是定义一个实现类,具体步骤如图。如果写成com.transferData(new Flash()),也和这个写法是相同的。
9、接口,实际上可以看成一种规范
匿名实现类、匿名对象
练习1
答案
练习2
1、class Ball中有一个play方法,是对Playable、Bounceable两个接口中play方法的重写,但是两个方法都有play方法,这里是将重写看成对两个接口中的方法都进行了重写
2、在class Ball中的play方法第一行有个ball=new Ball,说明ball这个变量已经声明过了,是因为Ball实现了Rollable这个接口,所以实现了其中的语句。
3、但是在Rollable这个接口中的Ball ball前面省略了public static final,也就是ball其实是一个常量,所以在class Ball中的play方法不能再给ball new一个新的了。
JDK8接口的新特性
1、接口中定义的静态方法,只能通过接口调用
2、通过实现类的对象,可以调用接口中的默认方法
如果实现类中重写了接口中的方法,那么调用时调用的是重写后的方法。
3、类优先原则:如果实现类继承的父类和实现的接口中声明了同名同参数的方法,那么实现类在没有重复发的前提下,默认调用的是父类中的方法。
4、接口冲突:如果实现类实现了多个接口,而多个接口中定义了同名同参数的默认方法,那么在实现类没有重写该方法的情况下,会报错。
此时必须在实现类中重写方法。
5、如何在实现类中调用父类或接口中被重写的方法