A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

被 final修饰的类不可以被复写,SubTime 这个类继承了GetTime,那为什么SubTime 还可以调用这个被final修饰的getTime()方法?不可以复写是子类不能用吗?还有既然getTime()方法是final类型的,这个方法不可以复写(不能改变),那为什么里面还有一个抽象方法呢?
abstract class  GetTime
{
        public final void getTime()
        {
           long start = System.currentTimeMillis();
       runCode();
           long end = System.currentTimeMillis();
           System.out.print("毫秒="+(end-start));
        }

        public abstract void runCode();
}

class SubTime extends GetTime
{
     public  void runCode()
         {
             for(int x=0;x<1000;x++)
                 {
                    System.out.print(x);
                 }
         }
}
class  TemplateDemo
{
        public static void main(String[] args)
        {
                SubTime st = new SubTime();
                st.getTime();
        }
}

8 个回复

倒序浏览
抽象类 依然还是个类  只是不能被实例化  final修饰的方法可以和 抽象方法 同时存在  楼主是把抽象类和接口搞混了把
回复 使用道具 举报
楼主首先要搞清楚final加在类上表示类不能被继承,加在方法上表示不能被重写。
你代码中的GetTime类是个抽象类,并没有final修饰符,所以可以被SubTime继承。
GetTime类中的getTime()方法用final修饰,所以不可以重写(重写或者说覆盖,懂吧。。),SubTime类中也没有重写。
你的SubTime类继承了GetTime类,并且重写了没有被final修饰的runCode()方法。
SubTime类只是继承并重写了runCode()方法,并没有任何问题。

最后觉的回答的好的话赏点黑马币吧。。。。。。
回复 使用道具 举报
为什么SubTime 还可以调用这个被final修饰的getTime()方法?不可以复写是子类不能用吗?
答:不可以复写就是子类只可以使用该方法已经定义好的功能,而不能复写,修改,覆盖。被final修饰的方法不可以         被复写,可以被调用。
还有既然getTime()方法是final类型的,这个方法不可以复写(不能改变),那为什么里面还有一个抽象方法呢?
答:getTime()方法是final类型,不能被复写。但runCode()这个方法与getTime()方法没有一点关系。没有被final修饰,为抽象方法,自然可以复写。
回复 使用道具 举报
子类必须覆写父类的抽象方法,final修饰的方法可以被子类继承,不能被覆写,只有preavate方法不能被子类调用
回复 使用道具 举报
Monster 发表于 2015-6-15 20:36
子类必须覆写父类的抽象方法,final修饰的方法可以被子类继承,不能被覆写,只有preavate方法不能被子类调 ...

final和Abstract不能同时修饰一个方法
回复 使用道具 举报
父类abstract和final修饰变量时,子类实现类只能去重写。
回复 使用道具 举报
两个关键字是不共存的
回复 使用道具 举报
1千克=1024克 发表于 2015-6-15 19:54
为什么SubTime 还可以调用这个被final修饰的getTime()方法?不可以复写是子类不能用吗?
答:不可以复写 ...

很给力:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马