有抽象方法就必须写 abstract 吗?抽象类能没有抽象方法吗?
查看完整题解
参考回答
直接回答
普通类声明了抽象方法,就必须声明为 abstract;抽象类则可以一个抽象方法都没有,用来限制直接实例化并提供共享实现。还要把特殊语法分开:枚举可以声明由各个常量类体实现的抽象方法,但不能据此把普通类规则直接套成“所有类型都必须显式写 abstract”。
讲清原理
普通类如果仍留下未实现的抽象行为,就不能承诺能够直接创建完整实例。具体子类需要实现尚未完成的方法,否则它也要继续保持抽象。
有些基类的方法已经全部实现,设计上仍只允许通过子类使用,这时 abstract 仍有意义。它不等于“类里肯定有一个方法没有方法体”,也不等于类不能有构造器和字段。
例子与易错点
abstract class Base {
String label() { return "共享实现"; }
}
class Child extends Base {}
System.out.println(new Child().label()); // 共享实现
这里 Base 没有抽象方法,声明依然合法,但不能直接 new Base()。枚举的抽象方法要求所有常量提供相应实现,属于另一套受限制的规则。接口中的抽象方法也不意味着接口要改写成 abstract class。
相关题:第 9 题、第 20 题、第 32 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。