Contents
11.6. Java 8新特性默认方法和静态方法¶
在Java 8之前,尽管Java语言中接口已经非常优秀了,但相比其他面向对象的语言而言Java接口存在如下不足之处:
- 不能可选实现方法,接口的方法全部是抽象的,实现接口时必须全部实现接口中方法,哪怕是有些方法并不需要,也必须实现。
- 没有静态方法
代码示例
InterfaceA.java
package DefaultFangFa;
/*
* 在接口InterfaceA中声明了两个抽象方法methodA和methodB,两个默认方法methodC和methodD,还有
声明了静态方法methodE,
接口中的默认方法类似于类中具体方法,给出了具体实现,只是方法修饰符是default。接口中静态方法类似于类中静态方法
*/
public interface InterfaceA {
void methodA();
String methodB();
// 默认方法
default int methodC() {
return 0;
}
// 默认方法
default String methodD() {
return "这是默认方法....";
}
// 静态方法
static double methodE() {
return 0.0;
}
}
ABC.java
package DefaultFangFa;
public class ABC implements InterfaceA{
@Override
public void methodA() {
// TODO 自动生成的方法存根
}
@Override
public String methodB() {
// TODO 自动生成的方法存根
return "实现methodB方法......";
}
@Override
public int methodC() {
// TODO 自动生成的方法存根
return 500;
}
}
调用代码
package DefaultFangFa;
public class HelloWorld {
public static void main(String[] args) {
//声明接口类型,对象是实现类,发生多态
InterfaceA abc = new ABC();
// 访问实现类methodB方法
System.out.println(abc.methodB());
// 访问默认方法methodC
System.out.println(abc.methodC());
// 访问默认方法methodD
System.out.println(abc.methodD());
// 访问InterfaceA静态方法methodE
System.out.println(InterfaceA.methodE());
}
}
/*
实现methodB方法......
500
这是默认方法....
0.0
*/