JDK1.8中为了加强接口的能力,使得接口可以存在具体的方法。
前提是方法需要被default或static关键字所修饰。
下面我们直接上实例
1.定义一个接口 TestInterface,我们在定义两个具体实现的方法,分别用static和default修饰
package test;
public interface TestInterface {
static void showStatic(String s) {
System.out.println("this is staticshow !"+s);
}
default void showDefault(String s) {
System.out.println("this is showDefault method"+s);
}
//报错
// public void showPublic(String s) {
// System.out.println("this is showPublic method"+s);
// }
void sayHi();
}
2.定义一个实现类InterfaceDemotest 实现该接口
package test;
public class InterfaceDemotest implements TestInterface{
public static void main(String args[]) {
InterfaceDemotest t = new InterfaceDemotest();
t.sayHi();
t.showDefault("大神!");
TestInterface.showStatic("大佬!");
}
}
3.子类可以被重写接口中default方法
public void showDefault(String s) {}{
System.out.println("子类重写");
}
4.注意:关键字default和类中没有修饰(default)的方法不一样
这里的关键字default不要跟平时我们在类中定义方法时,没有加任何访问修饰符时的(default)相混淆,它们的意义是不一样的.
这里的指的是一种场景,既类中成员(方法、变量)没有被访问修饰符修饰,所以属于(default)的情况,效果是这类成员只能在类所在的包内被访问。
//没有访问修饰符修饰,所以默认为(default),
//跟加了关键词的default是不一样的,一般的类加 default 修饰方法会直接报错
void test() {
System.out.println("没有修饰符");
}
附加知识点:
1.以下是各版本的名称及发布日期:
2.jdk1.8新特性
-
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。
-
新增lambda表达式
-
提供函数式接口
-
Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用
参考链接:https://blog.csdn.net/SnailMann/article/details/80231593 Java中Default关键字的两种使用方法
创造价值,乐在分享。
欢迎加入我的Java与Android逆向开发交流QQ群,提问学习。