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