方法引用的 4 2 種方式

2021-08-22 05:57:19 字數 4704 閱讀 7336

方法引用的 4 + 2 種方式

對於類來說,有4種方式

1. 物件引用成員方法

2. 類名引用靜態方法

3. super引用父類方法

4. this引用本類方法

對於構造器來說,有2種方法。

1. 類的構造器引用

2. 陣列的構造器引用。

1 物件引用成員方法詳解

物件引用成員方法

物件名::方法名

*/public class demo01methodref

public class myclass 

}

public static void method(printable printable) 

}

public inte***ce printable
//練習,lambada表示式,匿名內部類,方法的引用  這裡總結了乙個練習方法,一般的列印輸出都能練習到方法的引用,增加應用頻率

//物件引用成員方法      lambada自己不重寫了。找了個物件,物件裡有個方法居然跟自己的抽象方法相似,那麼如果目的一致,

就可以把它當作重寫的,目的不一致,那麼引用後的結果就是物件的成員方法的,如果引數不要了,物件裡的方法沒有用到該引數,那裡面是啥內容,方法引用後就是啥,比如列印hello 算1+1=2. 也算是找到了乙個高檔方法表達簡單方法的途徑,只不過該簡單方法捨棄了自己的引數,或者歪用了引數。這麼想,寫抽象介面利用方法的引用和lambada表示式,就是把簡單的問題變複雜,直接算1+1=2,我非要建立介面,抽象方法當引數傳入成員方法,成員方法呼叫時再整個類,創個物件,做個成員方法,引用一下。

public class demo02methodref 

// });

method((s) -> system.out.println("使用lambada手忙腳亂的" + s));

// 執行:使用lambada手忙腳亂的處理檔案

//注意需要重寫的run方法是有引數str的

// a代表有引數,

assistant a = new assistant();

// method(s -> system.out.println("使用lambda表示式手忙腳亂的處理" + s));

method(s -> a.dofile(s));//助手正在井井有條的處理

method(a::dofile);// 助手正在井井有條的處理

//介面作為引數傳進來,lambada表示式裡是需要重寫的抽象方法。然而抽象方法想要做的事和物件的成員方法

//不一致,返回值和引數一致,成員方法把引數拋棄了,該引用也就是重寫過程中拋棄了引數,直接執行方法體的內容

// 該方法可以強行造格式,比如寫出來helloworld 。介面:void(string) 傳參賦值可以任意賦值,建立乙個列印

// helloworld的類。成員方法 void method(string) 方法體sout(helloword) 。則本來可以建立物件

//列印類名.method出來,我們可以用lambada表示式這一高檔的方法了。(string s)->類名.method(s)

//還可以用方法引用這種高檔的方法了。類名;;方法名 至此,好像沒有介面方法什麼事。那麼我們能把介面省

//略直接列印不?登出之後發現並不行。。。。,那麼匿名內部類是否可以,我試試

method(new helper()

});// 試驗之後發現可以,不過這個丟參讓人一眼就看出來了。不怎麼好

}public static void method(helper helper)

}

//物件的類

ackage cn.itcast.demo06b_物件引用成員方法;

public class assistant

}

//函式介面

public inte***ce helper
2 類名引用靜態方法

類名引用靜態方法

類名::靜態方法

*/public class demo01methodref

public static void method(int num, calculator c)

}

//函式介面

public inte***ce calculator
public class demo02methodref 

});method(" ", s -> stringunits.isblank(s));//類名引用靜態方法,拿到s對s進行操作,

// 所要做的正好是s要做的,我可以改,只要是抽象方法的返回值型別,引數型別的方法的類都能引用

// 或者說,只要是該類中的方法,類似重寫了介面中的方法,就可以用該格式引用

method(" ",stringunits::isblank);//

}public static void method(string str, stringchecker checker)

}

//自定義的函式介面,裡面寫了個檢查字串的方法,

public inte***ce stringchecker
//新建立的類。類引用靜態方法,那麼也就是主函式不建立該類的物件唄,不建立物件

//那麼也就只能引用靜態方法了。只有靜態方法能在不建立物件的情況下點出來執行

//介面要引用的類

可以看到這個類是點不出來非靜態方法的。那麼類名引用靜態方法格式和物件引用成員方法是一樣的,區別就是物件和類的區別。。

3super引用父類方法

//介面作為引數傳入子類方法了,子類沒有能力重寫,父類重寫,沒有能力呼叫,主函式呼叫。。。

/* super引用父類方法格式:

super::父類方法

*///其呼叫作用的主函式,裡面就是執行了一下子類方法,子類中實現了方法的引用

public class demo01methodref

}

//函式介面

public inte***ce greetable
//父類

public class person 

}

//子類 ,子類要用引用,方法中應該有重寫介面方法的類似方法,它沒有,借父類的sayhello,那麼格式。super::sayhello

public class student extends person 

public static void method(greetable greetable)

}

4  this 引用本類方法

*/   main函式呼叫稱為本類的那個類

public class demo01ref

}

//我是本類。介面傳參到類,我自己的類裡面有乙個方法重寫的跟介面中想重寫的相似,this::方法名 那麼我是不是也可本類名::方法名

上面 有類引用靜態方法,然而本類中好像沒有靜態方法,是不是也可以呢,我試試,然而結果並不可以。。

public class man

public void man(rich rich)

public void method()

}

//函式介面rich

public inte***ce rich
*

this引用本類的方法格式:

this::方法名

*/public class demo01ref

4+1(上面是前4個)

*

類的構造器引用

類名::new

*/public class demo01classconstrutionref

});//用匿名內部類表示的創初始化物件。因不能new 介面物件。

// lanbada表示式

method((name, age) -> new person(name, age));

/* 引數 引數

* */

}public static void method(personbuilder personbuilder)

}

//介面,該介面的抽象方法想建立乙個物件,那麼重寫方法就要。。。。

public inte***ce personbuilder

4+2 陣列的構造器引用

/*

陣列的構造器引用

資料型別::new

*/public class demo01arrayref

});method(int::new);

method((len) -> new int[len]);

}public static void method(arraybuilder arraybuilder)

}

//函式介面

public inte***ce arraybuilder

4 2 shell中的引用

4.2 shell中的引用 shell中的引用 在bash中有很多特殊字元,這些特殊字元就具有特殊含義。引用就是通知shell將這些特殊字元當作普通字元來處理。轉義字元 如果將 放到特殊字元前面,shell就忽略與 相挨的乙個特殊字元的原有含義,把它們當作普通字元對待。ll file mkdir 1...

C 引用物件成員的三種方式

在程式中經常需要訪問物件中的成員。訪問物件中的成員可以有3種方法 1.通過物件名和成員運算子訪問物件中的成員 2.通過指向物件的指標訪問物件中的成員 3.通過物件的引用變數訪問物件中的成員。通過物件名和成員運算子訪問物件中的成員 例如在程式中可以寫出以下語句 stud1.num 1001 假設num...

C 引用物件成員的三種方式

在程式中經常需要訪問物件中的成員。訪問物件中的成員可以有3種方法 1.通過物件名和成員運算子訪問物件中的成員 2.通過指向物件的指標訪問物件中的成員 3.通過物件的引用變數訪問物件中的成員。通過物件名和成員運算子訪問物件中的成員 例如在程式中可以寫出以下語句 stud1.num 1001 假設num...