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