天天看點

内部類

1 成員内部類建立對象  外部類.内部類     

對象名=new 外部類對象.new内部類對象

Outer.Inner i=new Quter().new Inner();

  内部類可以通路外部類私有

  外部類通路内部類 需要建立對象

  外部類名.内部類名 對象名=new 外部類對象.new内部類對象

  

       私有内部類 不能通過上述方法建立對象,在自己所在的内部類中建立對象

  靜态内部類 建立對象   外部類名.内部類名 對象名=new 外部類名.内部類名();

package com.yang.innerClass;

public class Car {
    String brand="外部類小馬";
    class Engin{
        String brand="内部類中馬";
        public void run(){
            String brand="局部老馬";
            System.out.println(brand+this.brand+Car.this.brand);
        }
    }

}
      
package com.yang.innerClass;

public class MTest {
    public static void main(String[] args) {
        Car.Engin c=new Car().new Engin();
        c.run();
    }
}
      

2 局部内部類(該類在類的成員方法中)

隻能在内部類所在的方法中,建立對象并通路

該内部類可以通路外部類成員,也可以通路方法的局部變量

匿名内部類

  new 接口名 或者類名(){

    重寫方法

}.方法

package com.yang.innerclass;

public class MTest {
    public static void main(String[] args) {
        new Inner(){
            public void study(){
                System.out.println("好好學習");
            }
            public void  show(){
                System.out.println("show......");
            }
        }.show();
    }
}
      

  想用兩個方法  Inner i=new Inner(){實作}; i.方法;

package com.yang.innerclass;

public interface Inner {
    public abstract void study();
    public  void show();
}
      

Lambda表達式 函數式程式設計思想 (自己想做什麼)

1 必須是接口

2 抽象方法數量必須是一個,隻能是一;

三要素 形式參數 箭頭 代碼塊

    (形式參數) -> {代碼塊}

package com.yang.Lambda;

public class TestLambda {
    public static void main(String[] args) {
        useShowHandler(()-> System.out.println("Labmbda使用方法"));
    }

    public static void useShowHandler(ShowHandler showHandler){
            showHandler.show();
    }
}
interface ShowHandler{
    void show();
}
      
package com.yang.Lambda;

public class TestLambda1 {
    public static void main(String[] args) {
        printMessage((String mes)->{
            System.out.println("匿名内部類"+mes);
        });
    }
    public static void printMessage(StringHander stringHander){
        stringHander.printMessage("王");
    }
}
interface StringHander{
    void printMessage(String mes);
}
      

 Lambda無參帶有傳回值 

package com.yang.innerReturn;

import java.util.Random;

public class MTest {
    public static void main(String[] args) {
        getNum(()->{
            Random random=new Random();
            int i=random.nextInt(10)+1;
            return i;
        });
    }
    public static void getNum(InnerHander innerHander){
        System.out.println(innerHander.getNum());
    }
}
      
package com.yang.innerReturn;

public interface InnerHander {
    int getNum();
}
      

Lambda 有參數有傳回值  和上面的例子類似就不寫了

Lambda省略模式  參數可以省略,如果參數有多個不能隻省略一個,參數隻有一個可以省略小括号,大括号中隻有一條語句 大括号可以省略 renturn 可以省略,分号可以省略

package com.yang.innerReturn1;

import com.yang.innerReturn.InnerHander;

import java.util.Random;

public class MTest {
    public static void main(String[] args) {
        getNum(()-> new Random().nextInt(10)+1
        );
    }
    public static void getNum(InnerHander innerHander){
        System.out.println(innerHander.getNum());
    }
}
      

Lambda表達式和匿名内部類

上一篇: 内部類
下一篇: 内部類

繼續閱讀