java - 为什么FileLock类中的抽象方法能够被直接使用?如 release ( ) , isValid ( )
迷茫
迷茫 2017-04-17 17:36:11
[Java讨论组]

抽象方法不是应该被重写后,才能使用吗?
如下面一个简单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 ( ) ;         
        }
}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
天蓬老师
 FileLock fl = fos . getChannel ( ) . tryLock ( ) ;

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号