关于一些库调用的一些看法: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++ 去实现的!