不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java的接口定义增强
在JDK1.8之前,接口有如下特性:
1、接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
2、接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3、接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
JDK1.8,增强接口定义:
扫描二维码关注公众号,回复:
11248924 查看本文章
允许在接口中定义普通方法,用default或static关键字修饰。
用default关键字定义方法
在接口中使用default关键字定义方法,需要添加方法体,default见名思意就是说,为这个方法提供一个默认写好的方法体实现。当然,在子接口中也可以继续去覆写它。
interface A{
String NAME = "tutu"; // 全局常量
void print(); // 抽象方法
default void dprint() {
System.out.println("接口A中default定义的方法体");
}
}
class X implements A{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("接口A中的抽象方法");
}
@Override
public void dprint() {
System.out.println("覆写接口A中default定义的方法体");
}
}
public class TestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new X();
a.dprint();
a.print();
}
}
程序输出:
覆写接口A中default定义的方法体
接口A中的抽象方法
用Static关键字定义方法
使用static关键字修饰的方法叫做静态方法,它不依赖于某个对象就可以访问。在接口中定义static方法也是如此,可以通过接口名直接调用。
interface A{
String NAME = "tutu"; // 全局常量
void print(); // 抽象方法
static void sprint() {
System.out.println("接口A中static定义的方法体");
}
}
class X implements A{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("接口A中的抽象方法");
}
}
public class TestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
A.sprint();
}
}
程序输出:
接口A中static定义的方法体