Java中實(shí)現(xiàn)接口的三種方式您造嗎?
本文介紹了Java中實(shí)現(xiàn)接口的三種方式:常規(guī)實(shí)現(xiàn)方式、匿名內(nèi)部類和 Lambda表達(dá)式實(shí)現(xiàn)方式。希望已經(jīng)了解的同學(xué)可以重新溫習(xí)一下,不了解的同學(xué)則從中受益!
Java中接口最常規(guī)的實(shí)現(xiàn)方式
同學(xué)們都會知道,java中實(shí)現(xiàn)接口的方法通常如下:
定義接口
定義類實(shí)現(xiàn)接口
類中重寫接口里的方法
創(chuàng)建類對象
調(diào)用重寫后的方法
代碼實(shí)現(xiàn)如下:
//定義一個接口
public interface ITest {
public void func1();
}
//類實(shí)現(xiàn)該接口
public class CTest implements ITest {
@Override
public void func1() {
System.out.println("This is func1");
}
}
//調(diào)用類中,調(diào)用方法func1()
CTest ct=new CTest();
ct.func1();
通過匿名內(nèi)部類實(shí)現(xiàn)
匿名內(nèi)部類顧名思義也就是沒有名字的內(nèi)部類,它通常用來簡化代碼編寫。使用匿名內(nèi)部類還有個前提條件:必須存在繼承和實(shí)現(xiàn)關(guān)系的時候才可以使用!
不多說,直接上匿名內(nèi)部類實(shí)現(xiàn)接口的代碼
//定義一個接口
public interface ITest {
public void func1();
}
//調(diào)用類中直接實(shí)現(xiàn)接口中定義的方法,然后直接調(diào)
ITest it1 = new ITest() {
@Override
public void func1() {
System.out.println("This is func1 by anonymous");
}
};
it1.func1();
//或者寫成:
new ITest() {
@Override
public void func1() {
System.out.println("This is func1 by anonymous");
}
}. func1()
//如果需要接口中的兩個方法,這種寫法則不夠友好,因?yàn)橐淮沃荒苷{(diào)用一個方法
大家可以看到上面的代碼直接new了接口ITest(),然后重寫了方法func1,調(diào)用接口中方法的過程被大大優(yōu)化了!通過匿名內(nèi)部類只需要定義接口(ITest),無需定義這個接口的具體實(shí)現(xiàn)類(CTest)了。所以大家以后看到接口被new 然后直接實(shí)現(xiàn)里面方法的寫法時,千萬不要感到驚訝,這只是內(nèi)部類實(shí)現(xiàn)接口的方法而已。
通過lambda表達(dá)式來實(shí)現(xiàn)
Java 8 Lambda表達(dá)式在只有一個方法的接口實(shí)現(xiàn)代碼編寫中,可以起到簡化作用。
注意:這里特殊強(qiáng)調(diào)在只有一個方法的接口中!否則提示如下錯誤:
Multiple non-overriding abstract methods found in interface ***
代碼實(shí)現(xiàn)如下:
//定義一個接口
public interface ITest {
public void func1();
}
//調(diào)用類中直接實(shí)現(xiàn)接口中定義的方法,然后直接調(diào)
ITest it2 =()->{System.out.println("This is func1 by Lambda");};
it2.func1();
以上就是我對java中實(shí)現(xiàn)接口的三種方式的總結(jié)。