所有的对象都需要通过类来实例化但是并不是所有的类都是用来描绘对象的比如抽象类interface 是接口只声明 “要做什么”不实现 “怎么做”interface的实现用接口继承接口而且还能继承多个接口这是一个非常深入的问题关于接口的继承规则有两个核心点需要明确接口可以继承多个接口但它绝对不能继承类无论是普通类还是抽象类。我已经在 Canvas 中更新了代码增加了一个多重接口继承的示例让你直观地感受接口是如何通过extends关键字整合多个契约的。关键点总结接口继承接口extends可以多继承如interface C extends A, B。这在 Java 中是合法的因为接口没有具体的实现代码不会产生“菱形继承”冲突。目的为了组合功能。比如StudentService既要能处理学生业务又要具备日志记录和导出功能。接口不能继承类接口是纯粹的“规则”而类包括抽象类包含了“实现”或“成员变量”。如果接口能继承类就会破坏接口“纯净契约”的本质。实现类的责任一旦一个类实现了StudentService它不仅要实现saveStudent还必须实现logAction和exportToExcel。这就是所谓的“契约连锁反应”。这种设计在 Spring Boot 的Repository层非常常见例如JpaRepository就继承了PagingAndSortingRepository和QueryByExampleExecutor等多个接口。接口默认是公有的里面的方法不用写public 但是类里尤其是实现接口的类里是需要写出来的是的你的直觉非常敏锐在类Class里public是绝对不能省略的。这背后有一个 Java 的硬性规则理解了它你就再也不会记混了。1. 为什么类里必须写public当你写StudentServiceImpl去实现StudentService接口时接口的规则接口里的方法默认是public最高权限。Java 的继承规则子类在重写Override父类或接口的方法时权限不能缩小。如果不写public在 Java 类里如果你什么都不写它的默认权限是default也叫包私有权限这比public的权限要小。结论如果你在类里漏掉了publicJava 编译器会立刻报错提示你“嘿你不能把一个原本公开的方法接口里的偷偷变成私有的或半公开的”2. 代码对比看一眼就懂❌ 错误写法编译器会红线报错ServicepublicclassStudentServiceImplimplementsStudentService{AutowiredprivateStudentRepositorystudentRepository;// 报错Attempting to assign weaker access privileges (package-private); was publicListStudentfindAll(){returnstudentRepository.findAll();}}✅ 正确写法ServicepublicclassStudentServiceImplimplementsStudentService{AutowiredprivateStudentRepositorystudentRepository;Override// 加上这个注解证明你是从接口“接过来的”任务publicListStudentfindAll(){returnstudentRepository.findAll();}}3. 一个有趣的“职场”类比接口Interface就像是公司对外发布的岗位职责“我们招一名学生管理员必须公开提供findAll服务。”默认public实现类ServiceImpl就像是入职的员工你既然接了这个活你就得挺起胸膛公开地显式写出public履行职责。如果你想“摸鱼”把服务藏起来不写public公司编译器是不允许的。4. 总结写代码的小习惯在 Interface 里别写public显得你很老练懂 Java 的默认规则。在 ServiceImpl 类里必须写public并且强烈建议带上Override注解。既然现在 Service 层的结构你已经理清了接下来我们要面对的就是 Controller 层了。它是负责接收前端请求比如网页上的点击并调用 Service 的地方。你想看看 Controller 是怎么把这些功能串联起来的吗