前言
在JDK1.8以前,接口(interface)没有提供任何具体的实现,在《JAVA编程思想》中是这样描述的:“interface这个关键字产生了一个完全抽象的类,它根本就没有提供任何具体的实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现”。
但是这一限制在JDK1.8中被打破了,JDK1.8开始,接口允许定义默认方法和静态方法。
代码示例
定义一个IHello 接口
public interface IHello {
//抽象方法
void sayHi();
//静态方法
static void sayHello() {
System.out.println("static method : say Hello!");
}
//默认方法
default void sayByebye() {
System.out.println("default method : say bye!");
}
}
定义一个IHello接口的实现类
public class HelloImpl implements IHello {
//实现抽象方法
@Override
public void sayHi() {
System.out.println("normal method:say hi");
}
}
方法的调用
public class App
{
public static void main(String[] args)
{
HelloImpl helloImpl = new HelloImpl();
//对于abstract抽象方法通过实例对象来调用
helloImpl.sayHi();
//default 方法只能通过实例对象来调用
helloImpl.sayByebye();
//静态方法通过 接口名.方法名()来调用
IHello.sayHello();
//接口是不允许new的,如果使用new后面必须跟上一对花括号用于实现抽象方法,这种方式被称为匿名实现类,匿名实现类是一种没有名称的实现类
//匿名实现类的好处:不用再单独声明一个类 缺点:由于没有名称。不能重复使用,只能使用一次
new IHello() {
@Override
public void sayHi() {
System.out.println("normal method;say hi 新定义");
}
}.sayHi();
}
}
执行结果
normal method:say hi
default method :say bye!
static method : say Hello!
normal method:say hi 新定义