关于一些库调用的一些见解:
总的来说就是一句话:我要的是结果,函数需要什么我给什么!我就拿java来说吧!
java是面向对象的编程语言,就咱们学过的C++来说,多态是一种高级的编程技术,实际就是利用继承,父类指针可以接受指向子类的指针,从而根据不同的子类指针调用不同的子类相应的函数,这就实现了多态!在java中,在很大程度上就是给函数能有一个参数,参数最可怕的就是让你传进去一个对象!下面我就举个具体的例子!
创建一个BufferedReader对象!那么你可以查API找到BufferedReader
查到的构造函数如下!
BufferedRreader(Reader in);
BufferedReader(Reader in,int sz);
也就是说要构建一个BufferedReader类必须给它传递一个Reader 的对象,那我们就查一下Reader查得的结果是:
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
的一个对象就可以这么创建了:
BufferedReaderCuiXiaohong = new BufferedReader(Xiaohong);
到此我们的BufferedReader对象便创建了出来:
在这个过程中我们一直秉承着你要什么我给什么的原则,最终创建出了一个CuiFangFang ,是不是挺简单的,我没学过Andriod 但是我感觉既然它的开发语言既然是java ,我想大概的调用思路就是这样的:
在上述过程中,即使我不知道其他的类时干什么的,但是我还是可以达到我创建BufferedReader的这个目的,你有新的类我就查!当然在这个过程中,对多态要有一定的掌握(我想既然你学过C++这个问题就不是问题了,对于抽象类的具体作用,我想在这个过程中,基本上你也应该清楚了)!我再把大概的流程梳理一下:
最终你便产生了(CuiXiaohong)
呵呵,这个过程还是挺轻松的不是吗!
其实java中可以利用native 关键字来利用C、或者C++的,其实真正的内部实现还是咱C、C++做,不信你可以查源码,关键的部分全是C和C++ 去实现的!