黑马程序员技术交流社区

标题: final 和 abstract 在这个程序有点冲突 [打印本页]

作者: 腹黑生姜    时间: 2015-6-15 16:29
标题: final 和 abstract 在这个程序有点冲突
被 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();
        }
}
作者: q19871127    时间: 2015-6-15 16:39
抽象类 依然还是个类  只是不能被实例化  final修饰的方法可以和 抽象方法 同时存在  楼主是把抽象类和接口搞混了把
作者: 安安安    时间: 2015-6-15 18:30
楼主首先要搞清楚final加在类上表示类不能被继承,加在方法上表示不能被重写。
你代码中的GetTime类是个抽象类,并没有final修饰符,所以可以被SubTime继承。
GetTime类中的getTime()方法用final修饰,所以不可以重写(重写或者说覆盖,懂吧。。),SubTime类中也没有重写。
你的SubTime类继承了GetTime类,并且重写了没有被final修饰的runCode()方法。
SubTime类只是继承并重写了runCode()方法,并没有任何问题。

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

final和Abstract不能同时修饰一个方法
作者: 海绵宝宝的微笑    时间: 2015-6-15 20:58
父类abstract和final修饰变量时,子类实现类只能去重写。
作者: Foundmoon    时间: 2015-6-15 21:23
两个关键字是不共存的
作者: 腹黑生姜    时间: 2015-6-15 22:47
1千克=1024克 发表于 2015-6-15 19:54
为什么SubTime 还可以调用这个被final修饰的getTime()方法?不可以复写是子类不能用吗?
答:不可以复写 ...

很给力:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2