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表達式和匿名内部類