标题: 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()方法,并没有任何问题。