抽象类中带方法体的方法有何作用?是否需子类实现?
抽象类中带方法体的方法的用途与规则
一、这类方法的核心用途
- 通用逻辑复用:抽象类是子类的公共模板,带方法体的方法就是把所有子类共有的通用行为提前实现,避免每个子类重复编写相同代码。比如你代码里的
Animal.eat(),所有动物都有进食行为,默认逻辑统一放在抽象类里,子类直接继承就能用。 - 支撑模板模式:可以和抽象方法配合搭建业务框架——抽象类定义好整体流程,固定步骤用带方法体的方法实现,需要子类自定义的细节用抽象方法留空,让子类按需填充。
- 保障代码兼容性:如果后续给抽象类新增方法,用带实现的方式添加不会破坏现有子类运行——子类不用强制实现新方法,直接继承默认逻辑即可,不用修改大量子类代码。
二、子类是否需要实现这类方法?
带方法体的方法不需要子类强制实现,子类有两种选择:
- 直接继承使用:像你代码里的
Swan类,不用写eat()方法,调用new Swan().eat()时,会自动执行父类Animal里的eat()逻辑。 - 重写覆盖默认逻辑:如果子类有特殊行为需求,可以重写这个方法。比如天鹅吃鱼,就可以这样写:
class Swan extends Animal { public String getName() { return "Swan"; } @Override public void eat() { System.out.println("Swan is eating fish"); } }
你之前尝试实现eat()没成功,大概率是重写时方法签名出错(比如返回值、参数列表和父类不一致),或者拼写错误。可以加上@Override注解,编译器会帮你检查是否符合重写规则。
内容的提问来源于stack exchange,提问作者Naman Tyagi
相关产品推荐
相关产品推荐

