难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.接口与静态方法
接口体可以包含静态方法。方法体适用于静态方法。 静态方法使用static关键字定义。
静态方法定义:
演示:
请编写一个接口,接口体里面声明一个静态方法。直接使用接口名调用静态方法。
请观察程序运行结果。
代码:
Shape接口:
Main类:
结果:
从运行结果来看,符合预期结果。
2.接口中的所有抽象,默认和静态方法都是隐式公共的
接口中的所有抽象,默认和静态方法都是隐式公共的,因此我们可以省略public修饰符。
我们来试试去掉public修饰符看看。
演示:
请编写一个接口,接口体里面声明一个静态方法。直接使用接口名调用静态方法。
请观察程序运行结果。
代码:
Shape接口:
Main类:
结果:
从运行结果来看,符合预期结果。
省略了public修饰符让程序看起来更加的简洁。
下面我们来看看接口中static方法和哪些关键字可以搭配,在开始之前我们先来看看static、final、abstract三个关键字直接的搭配情况。
3.普通类中static、final搭配情况
演示:
请编写一个普通类,里面定义一个同时是static和final的方法。
请观察程序运行结果。
代码:
Circle类:
Main类:
结果:
4.抽象类中static、final、abstract搭配情况
演示:
请编写一个抽象类,里面定义一个同时是static、final和abstract的方法。
请观察程序运行结果。
代码:
Circle类:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Circle.javaError:(11, 39) java: 非法的修饰符组合: abstract和static
从运行结果来看,abstract关键字和static关键字不能同时出现,因为静态方法不能被重写,也就意味着,抽象静态方法没法得到实现,所以abstract关键字和static关键字不能同时出现。那我们分别去掉它们试试。首先是去掉,abstract关键字:
结果:
从运行结果来看,在抽象类里面声明一个同时用static和final修饰的方法是可以的。我们再来试试去掉static加上abstract关键字:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Circle.javaError:(11, 32) java: 非法的修饰符组合: abstract和final
从运行结果来看,程序出错了。首先,我们知道被final修饰的方法是不能被子类重写的,这也就意味着抽象方法没法得到实现,所以abstract关键字和final关键字绝对不可以同时出现。
5.接口中static、final、abstract搭配情况
演示:
请编写一个接口,里面定义一个同时是static、final和abstract的方法。
请观察程序运行结果。
代码:
Circle接口:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Circle.javaError:(11, 39) java: 此处不允许使用修饰符final
从运行结果来看,程序出错了。首先,如果使用了abstract关键字,就意味着你的方法是一个抽象方法,再加上一个final修饰符的话,就说明不允许被子类重写,也就是说该抽象方法无法被实现,所以final关键性不可以和abstract关键字同时出现。
那么在接口中,final关键字和static关键字可以同时出现吗?我们来试试:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/lab/Circle.javaError:(11, 30) java: 此处不允许使用修饰符final
从运行结果来看,接口中静态方法不能与final关键字搭配使用。对于方法而言,声明为staitc已经说明了只会在内存中存在一份,再加上final就多此一举。
6.多继承接口中的静态方法
多继承中的静态方法不存在覆盖,不存在隐藏。
接口中的静态方法只能使用接口名调用,其实现类都不能直接使用静态方法名调用。
演示:
请编写多个接口,让其一个接口继承其他接口。调用其接口中的静态方法。
请观察程序运行结果。
代码:
Computable接口:
Drawable接口:
Shape接口:
Main类:
结果:
从运行结果来看,各个接口分别调用各自静态方法。
注意
未声明为default或static的接口中的方法是隐式抽象的,因此abstract修饰符不与接口方法一起使用(可以使用,但不需要)。
本章小结
- 接口体可以包含静态方法。方法体适用于静态方法。 静态方法使用static关键字定义。
- 接口中的所有抽象,默认和静态方法都是隐式公共的,因此我们可以省略public修饰符。
- abstract关键字和static关键字不能同时出现,因为静态方法不能被重写,也就意味着,抽象静态方法没法得到实现,所以abstract关键字和static关键字不能同时出现。
- 我们知道被final修饰的方法是不能被子类重写的,这也就意味着抽象方法没法得到实现,所以abstract关键字和final关键字绝对不可以同时出现。
- 多继承中的静态方法不存在覆盖,不存在隐藏。
- 接口中的静态方法只能使用接口名调用,其实现类都不能直接使用静态方法名调用。
总结
- 在Java编程语言中,接口是类似于类的引用类型,它只能包含常量,方法签名,默认方法,静态方法和嵌套类型。 方法体仅适用于默认方法和静态方法。 接口无法实例化 - 它们只能由类实现或由其他接口扩展。
- 接口体可以包含抽象方法,默认方法和静态方法。接口中的抽象方法后跟分号,但没有大括号(抽象方法不包含实现)。默认方法使用默认修饰符定义,静态方法使用static关键字定义。接口中的所有抽象,默认和静态方法都是隐式公共的,因此我们可以省略public修饰符。
- 此外,接口可以包含常量声明。接口中定义的所有常量值都是隐式public,static和final,我们可以省略这些修饰符。
- 接口可以扩展其他接口,就像类子类或扩展另一个类一样。但是,虽然类只能扩展另一个类,但接口可以扩展任意数量的接口。接口声明包括它扩展的所有接口的逗号分隔列表。
- 未声明为default或static的接口中的方法是隐式抽象的,因此abstract修饰符不与接口方法一起使用(可以使用,但不需要)。
- 接口的访问修饰符只能是public和默认的访问修饰符。
至此,Java中接口与静态方法相关内容讲解先告一段落,更多内容请持续关注。
附:方法学习资料
附:接口学习资料
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java第六十五章:接口与默认方法详解
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!