匿名內部類與Lambda表示式

2021-09-24 14:56:15 字數 2546 閱讀 5427

1.特徵上:沒有名字;

2.實現上:既可以擴充套件類,也可以實現介面,但是不能兩者兼備;

3.限制上:如果實現介面,只能實現乙個介面;

4.功能上:簡化**,符合優先使用類而不是介面的設計思想;

舉例:

/**

* @description service介面

**/inte***ce service

/** * @description servicefactory介面

* @param

* @return

**/inte***ce servicefactory

/** * @description service介面實現類1

* @param

* @return

**/class implementation1 implements service

@override

public void method1()

@override

public void method2()

/*** 利用匿名內部類建立靜態servicefactory物件

**/public static servicefactory factory1 = new servicefactory()

};}/**

* @description service介面實現類2

* @param

* @return

**/class implementation2 implements service

@override

public void method1()

@override

public void method2()

/*** 利用匿名內部類建立靜態servicefactory物件

* jdk8之前

**/public static servicefactory factory1 = new servicefactory()

};}/**

* @description 公共類factories

* @param

* @return

**/public class factories

public static void main(string args)

}

1.特徵上:只有乙個抽象方法,可以包含多個預設方法,類方法;

2.限制上:在jdk8之後應用;

3.註解上:@functionalinte***ce;

引用上面匿名內部類例子中的**:

/**

* @description servicefactory介面

* @param

* @return

**/inte***ce servicefactory

1.功能上:簡化**,提公升開發效率;

2.限制上:jdk8以後;

3.形式上:應用於函式式介面上的表示式;

針對上面implementation1 和implementation2 類的例子利用函式式程式設計進行改進如下:

/**

* @description service介面實現類1

* @param

* @return

**/class implementation1 implements service

@override

public void method1()

@override

public void method2()

/*** 利用lambda表示式建立靜態servicefactory物件

* jdk8之後

**/public static servicefactory factory = () -> new implementation1();

}/**

* @description service介面實現類2

* @param

* @return

**/class implementation2 implements service

@override

public void method1()

@override

public void method2()

/*** 利用lambda表示式建立靜態servicefactory物件

* jdk8之後

**/public static servicefactory factory = () -> new implementation2();

}

lambda表示式在一定程度上可以簡化匿名內部類的**,都可以直接訪問final修飾的區域性變數,外部類的成員變數,但是二者有實質性的區別;

1.匿名內部類通過new表示式返回的引用被自動向上轉型為對servicefactory的引用;

2.匿名內部類可以應用於任何介面,lambda表示式只可以應用於函式式介面,;

3.匿名內部類可以呼叫介面預設方法,lambda表示式不可以;

Lambda表示式與匿名內部類

lambda的無參形式 public class test2 start lambda表示式建立執行緒 newthread system.out.println thread.currentthread getname start 上面分別通過匿名內部類和lambda表示式建立了兩個執行緒。lamb...

內部類,Lambda表示式

內部類定義格式 內部類的訪問特點 示例 內部類訪問特點 內部類可以直接訪問外部類的成員,包括私有 外部類要訪問內部類的成員,必須建立物件 public class outer public void method 外界建立成員內部類格式 私有成員內部類 靜態成員內部類 區域性內部類方式方式 示例 c...

內部類,lambda表示式

在乙個類中定義乙個類.分類 成員內部類 在類的成員位置 區域性內部類 在類的區域性位置 例子 成員內部類 public class test1inner class outer 成員內部類 概述 定義在類中方法之外的內部類.私有成員內部類訪問 private 在自己所在的外部類中建立物件訪問.sta...