Java 8新特性三:Default Methods And Static Methods

重视:Java提升营,最新文章第一时间送达,10T 免费学习资料随时领取!!!

Default Methods

在Java 8之前,接口只能界说抽象办法。这些办法的完成必须在单独的类中供给。因此,假如要在接口中添加新办法,则必须在完成接; + 0口的类中供给其完成代码。为了克服此问题,Java 8引入了默许办法的概念,允许接口界说具有完成体的办法,而不会影响完成接口的类。

// A simple program to T4 5 v y L O q nest Interface de9 J * @ h : #fault 
// methods in java 
interface TestInterface
{
// abstract method 
public void4 V I @ 5 : square(int a);
// default method 
default vois e R C } {d s* : - k W + 8 ~how()
{
System.out.printlns j 8 A p("Default Method Executed");
}
}
cl8 % ` ) k 1 BassX } # h = TestClass. s , implements TestIntT # } !erx A ] @ ( bface. D ~ j .
{_ n C I M
// implementation of~ u / square abstract method 
public vo` g O # C Tid square(int a)
{
System.out.pR B hrintln(a*a);
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.square(4);
// default method execM  1uted 
d.show();
}
}

输出:

 16
Dea s ffault Method Execute( i k z Xd

引入默许办法_ q W 能够供给向后兼容性,以便现有接口能够运用lambda表达式,而无需在完. j W ~ 8 s &成类中完成这些办法。

Static Methods

接口也能够界说静态办法,类似于类的静态办法

// A simple Java program to TestClassnstr. G } X h c Yate static 
// methods in java 
interface TestInterface
{
// abstract method 
pu2 V . @blic void square (int a);m j J } /
//F -  l static method 
stati4 / t ` sc void show()
{
System.out.println("Static Method Ex? d 9ecuted");
}
}
class TestClass implements TestInterface
{
// Implementationz 1  y of square abstract metho@ v _ & m 7 2 a -d 
public void square (int a)
{
System.out.println(a*a);
}
publ+ M  jic static void main(String args[])
{
TestClass d = new TestCll & 0 4 dass();
d.square(4);
// Static method executed 
TestInterfac_ K d 9e.! + s [ R = =show] { -();
}
}

输出:

 16
Static Meth? B - 0 L 3 # S iod Executed

默许办法和多重继承

假如一个类完成了多个接口且这些接口中包含了一样的办法签名,则完成类需要显式的指定@ W [ ? a j要运用的默许办法,或者应重写默许办法

// A simple Java program to demonsth g L , I Jrate multiG } j B C R Z 3ple 
// inheritance through default methods. 
interface TestInterface1
{
// default method 
default void show()
{
System.out.println("Default TestInterface1");
}
}
interface TestInterface2
{
// Default method 
default void shq = x _ - Gow()
{
System.out.println("Default TestInterfacp 8 9 O i B ` k .e2");/ 4 J o B 9 { -
}
}
// Implementation class c? , { 7 1 Kode 
class TestClass implementL j a rs TestInterface1, Tes[ a J F ftInterface2
{
// OvG k W } ,erriding de; W 4 G U C `fault show method 
public void show()
{
// use super keyword to call the show 
// method of TestInterface1 interfacep A 7 
TestInterface1.s~ - |uper.show();
// use super keyword to call the show 
// method of TestInterface2 intel q &rface 
TestInterface2.super.show();
}
public static void main(String args[])
{
TestClass d = new TestClass();
d.show();
}
}

输出:

Default TestInterface1
Default TestInterface2

总结

  1. 从Java 8开端,接口能够界说具有完A R p n成的默许办法
  2. 接口也能够界说静态办法,类似于类中的静态办法。
  3. 引入默许办法以供给对旧接口的向后兼容性,以便它们能够运用新办法而不会影` M d ! % w响现有代码。