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