public interface BaseDao {} // 通用 CRUD
public abstract class BaseDaoImpl implements BaseDao {}
public interface UserService extends BaseDao {} // 用戶業務 + 通用
public class UserServiceImpl extends BaseDaoImpl implements UserService {}
UserServiceImpl 已繼承 BaseDaoImpl 擁有通用方法,為何 UserService 還要 extends BaseDao?
BaseDao 定義**通用數據訪問契約**(save、delete、findAll...)。UserService 定義**用戶業務契約**(register、login、changePassword...)。UserService extends BaseDao 使 UserService **同時擁有兩類契約**,任何需要「用戶業務+通用查詢」的依賴方可直接依賴 UserService 接口。BaseDao(通用)、UserService(業務)BaseDaoImpl(通用實現)、UserServiceImpl(業務實現+繼承通用)BaseDaoImpl)。// Service 層注入
@Service
public class OrderService {
@Autowired
private UserService userService; // 既能調用 userService.findAll(),也能調用 userService.register()
}
若 UserService 不繼承 BaseDao,OrderService 需同時注入 UserService 和 BaseDao,增加耦合。
UserServiceImpl 仍可調用父類方法,**功能不受影響**。UserService 進行通用操作。UserService extends BaseDao 是為了**接口契約的完整性與多態注入便利性**,屬於經典的 DAO 模式 + 橋接模式 結合。實現類繼承關系(extends BaseDaoImpl)解決代碼復用,接口繼承關系解決類型契約與依賴管理。**兩者各司其職,不可混淆**。