接口中的静态方法
接口中的静态方法的定义格式:
xxxxxxxxxx
public static 返回值类型 方法名(参数列表){}
思考:接口中静态方法的定义格式跟类中静态方法的定义格式是一样的
需求: 1、定义一个接口Inter,里面有三个方法:抽象方法void show()、默认方法default void method(){}、静态方法public static void test(){} 2、定义接口的一个实现类InterImpl 3、定义测试类,在测试类的main方法中,按照多态的方式创建对象并使用
接口中静态方法的注意事项: 1、静态方法只能通过接口名来调用,不能通过实现类或者多态的实现类对象来调用 2、public关键字可以省略,static关键字不能省略
接口静态方法的练习
xxxxxxxxxx
package ch24;
public interface a_3_1Inter {
//无参无返回值的抽象方法
void show();
//默认方法
default void method(){
System.out.println("接口-默认方法method");
}
//静态方法。注意下面那行的public关键字可以省略不写
public static void test(){
System.out.println("接口-静态方法test");
}
}
xxxxxxxxxx
package ch24;
//a_3_1Inter接口的实现类
public class a_3_2InterImpl implements a_3_1Inter,a_3_4Flyable{
public void show() {
System.out.println("实现类-重写show");
}
//a_3_1Inter接口的静态方法和默认方法不需要在这里的实现类里面重写,我们只重写了抽象方法
}
xxxxxxxxxx
package ch24;
public class a_3_3测试 {
public static void main(String[] args) {
//按照多态的方式创建接口的实现类对象'a_3_2InterImpl'并使用
//注意:这里'a_3_1Inter'接口的实现类对象是'a_3_2InterImpl'
a_3_1Inter i = new a_3_2InterImpl();
i.show();//调用'a_3_1Inter'接口的show方法,即优先输出'a_3_1Inter'接口的'a_3_2InterImpl'实现类里面重写的show方法
i.method();//由于'a_3_1Inter'接口的'a_3_2InterImpl'实现类,没有重写'a_3_1Inter'接口里面的method方法,所以输出的是接口的method方法
//i.test();//跟上面那行同样的条件下,调用'a_3_1Inter'接口的test方法时,出现了报错。先注释
//原因:test在'a_3_1Inter'接口中是静态方法,接口中的静态方法只能被接口来调用,接口的实现类无法调用接口中的静态方法
//解决:通过'a_3_1Inter'接口来调用接口中的test静态方法,如下
a_3_1Inter.test();
//为什么不能使用实现类来调用接口里面的方法,即为什么不能i.test()。
//原因:当我们有2个接口,2个接口里面都有一个test方法,且实现类都实现了这两个接口,那我们这里的实现类对象i,调用的是哪个test方法呢,导致编译器无法判断
//所以不能使用实现类来调用接口里面的方法,需要使用对应的接口来调用对应接口里面的方法,例如a_3_1Inter.test()或a_3_4Flyable.test()
a_3_4Flyable.test();
//如果我们非要使用接口的实现类来调用接口中的静态方法,如下
//a_3_2InterImpl.test();//还是会报错。即证明接口的实现类无法调用接口中的静态方法。先注释
//当我们再新建一个接口'a_3_4Flyable',且在该接口里面写一个静态方法。并让'a_3_2InterImpl'实现类再去实现一个'a_3_4Flyable'接口
}
}
xxxxxxxxxx
package ch24;
public interface a_3_4Flyable {
//静态方法。注意下面那行的public关键字可以省略不写
public static void test(){
System.out.println("另一接口-test方法");
}
}