目录
一、JDK8接口增强
1.JDK8之前
JDK8中针对接口有所增强,在JDK8之前
interface 接口名{
静态常量;
抽象方法;
}
2.JDK8之后
在JDK8之后对接口做了增加,接口中可以由默认方法和静态方法
·interface 接口名{
静态常量;
抽象方法;
默认方法;
静态方法;
}
二、默认方法
2.1为什么要增加默认方法?
问题引出,
原因,当在接口中新增抽象方法时,所有的实现类都要重写该方法,非常不利于接口的扩展。
2.2接口默认方法的格式
interface 接口名{
修饰符 default 返回值类型 方法名{
方法体;
}
}
demo01: 新增默认方法
public class Demo01Interface {
public static void main(String[] args) {
A b = new B();
b.test02();
A c = new C();
}
}
interface A{
void test01();
default void test02(){
System.out.println("A接口中的默认方法test02执行了。。。");
};
}
class B implements A{
@Override
public void test01() {
}
}
class C implements A{
@Override
public void test01() {
}
}
打印输出:A接口中的默认方法test02执行了。。。
demo02:新增默认方法,并且在实现类中重写该方法
public class Demo01Interface {
public static void main(String[] args) {
A b = new B();
b.test02();
}
}
interface A{
void test01();
default void test02(){
System.out.println("A接口中的默认方法test02执行了。。。");
};
}
class B implements A{
@Override
public void test01() {
}
@Override
public void test02() {
System.out.println("B类中的重写方法test02执行了。。。");
}
}
class C implements A{
@Override
public void test01() {
}
}
打印输出:B类中的重写方法test02执行了。。。
三、静态方法
JDK8中新增了静态方法,作用也是为了接口的扩展
3.1 静态方法语法
interface 接口名{
修饰符 static 返回值类型 方法名{
方法体;
}
}
demo02: 接口中静态方法
public class Demo01Interface {
public static void main(String[] args) {
/*A b = new B();
b.test02();
A c = new C();
c.test02();*/
A.test03();
}
}
interface A{
void test01();
default void test02(){
System.out.println("A接口中的默认方法test02执行了。。。");
};
static void test03(){
System.out.println("A接口中的静态方法test03执行了。。。");
}
}
class B implements A{
@Override
public void test01() {
}
@Override
public void test02() {
System.out.println("B类中的重写方法test02执行了。。。");
}
}
class C implements A{
@Override
public void test01() {
}
}
输出:A接口中的静态方法test03执行了。。。
3.2静态方法的使用
接口中的静态方法在实现类中不能被重写,调用的话只能通过 "接口名.静态方法名()"。
4.默认方法和静态方法的区别
1.默认方法通过实例调用,静态方法通过接口名调用
2.默认方法可以被继承,实现类可以直接调用接口默认方法,也可以重写接口默认方法
3.静态方法不能被继承,实现类不能重写接口的静态方法,只能使用接口名调用