關於一些庫調用的一些看法:java
總的來講就是一句話:我要的是結果,函數須要什麼我給什麼!我就拿java來講吧!編程
java是面向對象的編程語言,就我們學過的C++來講,多態是一種高級的編程技術,實際就是利用繼承,父類指針能夠接受指向子類的指針,從而根據不一樣的子類指針調用不一樣的子類相應的函數,這就實現了多態!在java中,在很大程度上就是給函數能有一個參數,參數最可怕的就是讓你傳進去一個對象!下面我就舉個具體的例子!編程語言
建立一個BufferedReader對象!那麼你能夠查API找到BufferedReader函數
查到的構造函數以下!ui
BufferedRreader(Reader in);spa
BufferedReader(Reader in,int sz);指針
也就是說要構建一個BufferedReader類必須給它傳遞一個Reader 的對象,那咱們就查一下Reader查得的結果是:code
public abstract class Reader
extends Object
implements Readable, Closeable
一看這個類是個抽象的類,繼承於Object 實現了接口Readable CloseAble 再查其成員函數,發現有好幾個抽象的成員函數!要想建立一個Reader對象,要麼咱本身繼承一下Reader而後實現其幾個抽象的接口成員函數,要麼找非抽象的子類!對於java來講,我們都知道,什麼都封裝的好好的了,內部的細節咱們無法下手去本身編寫(必定程度上把咱們變的腦殘了,這就是我學java有一種受制於人的感受的緣由),因此咱們得找其子類!因而乎我又在Reader的繼承關係圖上看到了這個!
直接已知子類: 對象
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader 繼承
這真是驚喜啊,這就意味着咱們不用本身去實現了,那咱們就挑一個吧,挑誰呢,好吧,就挑InputStreamReader吧,咱查InputStreamReader的詳細說明!
咱們能夠看見這個
public class InputStreamReader
extends Reader
還好這不是一個抽象類,否則咱們還得找這個類的孩子給他老爸!緊接着查其構造函數
構造方法摘要 |
|
InputStreamReader(InputStream in) |
|
InputStreamReader(InputStream in, Charset cs) |
|
InputStreamReader(InputStream in, CharsetDecoder dec) |
|
InputStreamReader(InputStream in, String charsetName) |
|
一看,個人媽呀,怎麼還須要一個InputStream類的對象呢,那行你不是須要一個InputStream 類的對象才肯給我一個InputStreamReader的對象嗎,那行,咱有求與你,我忍,我給,再查InputStream 類,在java API查得結果以下:
public abstract class InputStream
extends Object
implements Closeable
天啊,咋仍是個抽象類呢 ,看來這回玩的有點大了啊!這確定又須要找它的兒子了(子類)
因而咱們看見了這個:
直接已知子類:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
那咱就拿FileInputStream 開刀吧,發現其構造函數以下:
構造方法摘要 |
|
FileInputStream(File file) |
|
FileInputStream(FileDescriptor fdObj) |
|
FileInputStream(String name) |
|
那咱就拿最後一個來講事,不就是一個String 類嗎,我給,好比說這個文件的名字就叫
Xiaohong吧,那麼咱們就能夠獲得一個FileInputStream類得對象了:
即:
String name = "xiaohong"
FileInputStream Xiao = new FileInputStream(name);
好了,咱們再回到上一層
對InputStreamReader 它的構造函數以下
InputStreamReader
(InputStream in)
(只列出了這個)!
你不是要一個
InputStream
類的對象纔會給我一個InputStreamReader的對象嗎,那好,我如今已經有了,雖然這個類不是直接的InputStream類,可是吧我得到的這個類的對象
Xiao
是繼承於InputStream的,根據多態,這個能夠的,其實用
InputStream做爲參數的目的也在這裏
因此我能夠用以下建立一個
InputStreamReader
對象:
InputStreamReader
Xiaohong = new InputStreamReader(Xiao);
這時候我們再回到上一層:就是咱想要建立的:
BufferedReader
(Reader in)
;由於InputStreamReader
繼承於Reader 因此建立
BufferedReader
的一個對象就能夠這麼建立了:
BufferedReader CuiXiaohong = new BufferedReader(Xiaohong);
到此咱們的BufferedReader對象便建立了出來:
在這個過程當中咱們一直秉承着你要什麼我給什麼的原則,最終建立出了一個CuiFangFang ,是否是挺簡單的,我沒學過Andriod 可是我感受既然它的開發語言既然是java ,我想大概的調用思路就是這樣的:
在上述過程當中,即便我不知道其餘的類時幹什麼的,可是我仍是能夠達到我建立BufferedReader的這個目的,你有新的類我就查!固然在這個過程當中,對多態要有必定的掌握(我想既然你學過C++這個問題就不是問題了,對於抽象類的具體做用,我想在這個過程當中,基本上你也應該清楚了)!
其實java中能夠利用native 關鍵字來利用C、或者C++的,其實真正的內部實現仍是咱C、C++作,不信你能夠查源碼,關鍵的部分全是C和C++ 去實現的!