为什么会这样编译?(在 Oracle java 5 和 java 6 下都试过(是的,我知道,我适应得很慢)
public abstract class BaseClass
{
public abstract void methodA(String abc);
public abstract String methodB(String abc);
}
public final class ConcreteClass
extends BaseClass
{
}
只需将这两个类弹出到单独的文件中,在它们上调用 javac 和poof,它们就会编译。由于抽象方法旨在由实现者实现,因此这没有意义。更进一步,当一段代码尝试调用未实现的方法时,我只会收到编译错误。
再说一次,我的问题是,有谁知道为什么编译器允许这样做(或者为什么我们希望它这样做)?
附加评论:
- 当我进行初始测试时,我最初没有将 ConcreteClass 标记为 final,我突然想到另一个类可以扩展该类,因此编译器可能不会抱怨并假设您以后会有其他类道路会照顾它,但是将课程标记为最终课程应该很清楚事实并非如此。