Java接口继承公共方法复用方案咨询:如何为继承同父接口的子接口提供公共实现
方案1:分层抽象类实现(兼容性最好,最常用)
你之前的设计问题在于让抽象类同时实现了两个职责完全独立的子接口,这两个子接口各自有专属的抽象方法,所以编译器强制要求你实现所有未实现的抽象方法,同时这种设计也不符合单一职责原则,不建议使用。
正确的分层逻辑为:
- 定义公共抽象类仅实现父接口
AccountModificationAPI,在这个类里完成所有公共方法的实现 - 管理员账号操作实现类继承该抽象类,同时实现
LibrarianAccountModificationAPI,仅需要实现管理员专属的抽象方法 - 会员账号操作实现类继承该抽象类,同时实现
MemberAccountModificationAPI,仅需要实现会员专属的抽象方法
代码示例
公共抽象实现类
public abstract class AbstractAccountModification implements AccountModificationAPI { // 实现所有父接口的公共方法 @Override public int createAccount(Account account) { // 公共业务逻辑 return 0; } @Override public Account viewAccount(String id) { // 公共业务逻辑 return null; } @Override public String resetPassword(String id, String password) { // 公共业务逻辑 return null; } @Override public String updateName(String name) { // 公共业务逻辑 return null; } @Override public String updatePhone(String phoneNumber) { // 公共业务逻辑 return null; } @Override public String updateAddress(Address address) { // 公共业务逻辑 return null; } @Override public String closeAccount(String accountName) { // 公共业务逻辑 return null; } }
管理员账号操作实现类
public class LibrarianAccountModificationImpl extends AbstractAccountModification implements LibrarianAccountModificationAPI { // 仅需要实现Librarian子接口专属的5个方法即可 @Override public String resetMemberPassword(String accountName) { // 管理员专属业务逻辑 return null; } @Override public Account registerMemberAccount(Account account) { // 管理员专属业务逻辑 return null; } @Override public String deleteMemberAccount(String accountName) { // 管理员专属业务逻辑 return null; } @Override public String updateMemberAccountStatus(String accountName) { // 管理员专属业务逻辑 return null; } @Override public String blockMember(String accountName) { // 管理员专属业务逻辑 return null; } }
会员账号操作实现类
public class MemberAccountModificationImpl extends AbstractAccountModification implements MemberAccountModificationAPI { // 仅需要实现Member子接口专属的1个方法即可 @Override public void extendAccountValidity() { // 会员专属业务逻辑 } }
方案2:Java 8+ 接口默认方法实现(不需要抽象类)
如果你的项目使用JDK 8及以上版本,可以直接把父接口的公共实现逻辑写为default默认方法,无需额外定义抽象类,子接口的实现类会自动继承这些默认实现,只需要实现自己的专属方法即可。
代码示例
改造后的父接口
public interface AccountModificationAPI { // 不需要公共实现的方法保留抽象方法定义 int createAccount(Account account); Account viewAccount(String id); // 需要复用的公共逻辑用default修饰 default String resetPassword(String id, String password) { // 公共业务逻辑 return null; } default String updateName(String name) { // 公共业务逻辑 return null; } default String updatePhone(String phoneNumber) { // 公共业务逻辑 return null; } default String updateAddress(Address address) { // 公共业务逻辑 return null; } default String closeAccount(String accountName) { // 公共业务逻辑 return null; } }
内容的提问来源于stack exchange,提问作者sss1992
相关产品推荐
相关产品推荐

