最近在用Charset、FileChannel类时发现,其中尤其是FileChannel类有很多都是 abstract 抽象类,但是却都能调用。
我有看过源代码,包括 ByteBuffer 所有的抽象方法,它都是最普通的抽象方法,是没有实际的运行代码的。搞不懂,它怎么运行起来的。
1、所以想问下这是为什么呢?
2、这样做设计上难道有什么好处吗?
还请大家帮忙解答,谢谢~~!!

解决方案 »

  1.   

    有实际的实现类只是你看不到,你可以在对象上调用getClass()方法查看到底是哪个类
      

  2.   

    FileChannel 是抽象类,不会FileChannel对象。
    但会有FileChannel引用,指向FileChannel的子类啊,
    也就是那些所有的抽象方法的具体实现的那个类,比如FileChannelImpl。好处就是以后可以再有别的实现啊。只要继承了FileChannel,自己一实现里面的具体细节,而其他地方可能用到可能都是FileChannel的引用,并不具体指明是哪个实现,而到底是哪个实现,看你自己高兴啦。