示例代码:
1.默认会在类型前面添加public staic final修饰变量,所以可省略
2.默认在方法前面添加public abstract修饰,但没有staic和final修饰
注意事项:
1、用staic final的变量就是常量
2、接口只能由成员变量(常量)和成员方法(抽象方法)两部分组成
3、所以接口不能创建对象 即不能通过new 接口名()创建对象,要使用的话用implements实现接口
4.成员变量和方法的权限修饰符只能是public,不能是private,default,protected
1.若接口中的方法重名,实现同名方法相当于把接口的重名方法都实现了
2.方法名相同,参数不同的话,会被当做两个不同的方法
3.仅仅是方法类型不同,会报错,因为不知道执行那个方法
示例代码:
对于代码
Driver s = new A();
s.drive();
左边变量Driver s还可以用接口Singer s替换,当然也可以父类Studnet s替换啦
以后如果不好用,就可以直接换new B(),前提是B实现了Driver,而s.drive就不用修改了,解耦方便
接口新增了这个三种方法,接口的组成部分就多了这三种方法了,也就是说接口组成部分为常量、抽象方法还有这新增的三种方法。
该新增的三种方法,该三种方法里面可以写{} ,{}里面写方法体(语句)了
目的就是扩展接口自身的功能,接口自身有方法,其实现类可以去调用。
如果在接口中重新定义一个抽象方法的话,那么接口中的所有实现类都必须实现这个抽象方法,假如接口的实现类有10000个,那这10000的实现类都要去实现这个抽象方法,所以这就是为什么Java要在接口中新增这三个方法的原因了
方法1(方法前面default修饰):既然是default修饰,那访问范围当然是同包下访问咯
不同包下也能访问,说明默认有public修饰
default前面默认有public,也就是说访问范围就是public,而不是default,这个default只是一个标识
方法2(方法前面private修饰):只能在本类中访问
既然是private修饰,自然而言实现类是无法在本类外访问的
方法3(方法前面static修饰):其实也默认加了public,也就是public static修饰
通过接口名.方法名访问
注意,接口可以多继承,但类不能多继承
接口的多继承其实就是为了简化书写,便于类实现罢了
例如下面代码,类E要实现A,B,C接口直接implements比较麻烦
简化形式,直接写接口D,虽然是简化形式,但类E该必须实现的抽象方法,还是得实现,也就是说必须实现A,B,C,D(包括D)的抽象方法
和事项1一个道理,只不过换了中形式而已,其本质一样的
结果验证
接口新增的default冲突了会报错,但是又可以不冲突
可以看到这里报错了,但是又可以让它不报错,就是class N去实现test()方法
这个不冲突可以理解为calss N去实现了test方法相当于把接口It1和It2的两个方法都实现了