abstract关键字与抽象类详解?
请详细解释Java中abstract关键字的作用,抽象类的定义、特征、使用场景,以及抽象类与接口的区别。说明为什么抽象类不能被实例化,以及抽象方法必须被子类实现的规则。
回答
编译有声
abstract关键字:可修饰类和方法。
抽象类:
- 使用
abstract class定义 - 不能被实例化(new)
- 可以包含构造方法、成员变量、普通方法和抽象方法
- 子类必须实现所有抽象方法(除非子类也是抽象类)
- 可以有main方法
抽象方法:只有声明没有方法体,子类必须重写(除非子类也是抽象类)。
使用场景:当多个子类有公共的属性和行为模板,但部分行为的具体实现不同时。模板方法模式就是典型应用。
与接口的区别(详见接口vs抽象类题目):抽象类更强调「是什么」的继承关系,可以有状态(成员变量)和部分实现;接口更强调「能做什么」的行为契约。