📅  最后修改于: 2020-04-02 05:15:32             🧑  作者: Mango
在Java 8之前,接口只能具有抽象方法。这些方法的实现必须在单独的类中提供。因此,如果要在接口中添加新方法,则必须在实现相同接口的类中提供其实现代码。为克服此问题,Java 8引入了默认方法的概念,该方法允许接口具有可实现的方法,而不会影响实现接口的类。
// Java接口的默认方法
interface TestInterface
{
// 抽象方法
public void square(int a);
// 默认方法
default void show()
{
System.out.println("默认方法被执行");
}
}
class TestClass implements TestInterface
{
// 实现square静态方法
public void square(int a)
{
System.out.println(a*a);
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.square(4);
// 默认方法被执行
d.show();
}
}
输出:
16
默认方法被执行
引入了默认方法以提供向后兼容性,以便现有接口可以使用lambda表达式,而无需在实现类中实现这些方法。默认方法也称为防御者方法或虚拟扩展方法。
静态方法:
接口也可以具有静态方法,类似于类的静态方法。
// Java程序,展示接口的静态方法
interface TestInterface
{
// abstract抽象方法
public void square (int a);
// static静态方法
static void show()
{
System.out.println("静态方法被执行");
}
}
class TestClass implements TestInterface
{
// 实现square抽象方法
public void square (int a)
{
System.out.println(a*a);
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.square(4);
// 静态方法被执行
TestInterface.show();
}
}
输出:
16
静态方法被执行
默认方法和多重继承
如果两个已实现的接口都包含具有相同方法签名的默认方法,则实现类应显式指定要使用的默认方法,或者应重写默认方法。
// Java展示默认方法和多重继承
interface TestInterface1
{
// 默认方法
default void show()
{
System.out.println("默认 TestInterface1");
}
}
interface TestInterface2
{
// 默认方法
default void show()
{
System.out.println("默认 TestInterface2");
}
}
// 类的实现
class TestClass implements TestInterface1, TestInterface2
{
// 重写show方法
public void show()
{
// 使用super,调用TestInterface1接口
TestInterface1.super.show();
// 使用super,调用TestInterface2接口
TestInterface2.super.show();
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.show();
}
}
输出:
默认 TestInterface1
默认 TestInterface2
重要事项: