为什么FileLock类中的抽象方法能够被直接使用?如 release ( ) , isValid ( )

抽象方法不是应该被重写后,才能使用吗?
如下面一个简单FileLocking 程序

import java . io . * ;
import java . nio . channels . * ;
import java . util . concurrent . * ;
class FileLocking 
{
        public static void main (String [ ] args ) throws Exception 
        {
                FileOutputStream fos = new FileOutputStream ("File.txt") ; 
                FileLock fl = fos . getChannel ( ) . tryLock ( ) ;
                if (fl != null)
                {
                        System . out . println ("The file  is locked") ; 
                        TimeUnit . SECONDS . sleep (5) ; 
                        fl . release ( ) ;
                        System . out . println ("The file is released") ;
                }    
                fos . close ( ) ;         
        }
}
阅读 2.2k
1 个回答
 FileLock fl = fos . getChannel ( ) . tryLock ( ) ;

这行返回的是FileLock的子类FileLockImpl(即所谓“父类引用,子类对象”),这个子类实现了FileLock的各种抽象方法,因此release()、isValid()等方法实际调用的是FileLockImpl的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题