为何Dart的interface class可在同库内被继承?与官方文档不符
Dart中interface类同库内可继承的原因解析
问题描述
以下是编写的Dart代码:
interface class Vehicle { int current_state = 0; void moveForward(int meters) { // ... } } // Can be constructed. Vehicle myVehicle = Vehicle(); // ERROR: Can't be inherited. class Car extends Vehicle { int current_state = 12; int passengers = 4; // ... @override moveForward(int meters) { current_state = current_state + meters; } } // Can be implemented. class MockVehicle implements Vehicle { int current_state = 0; @override void moveForward(int meters) { // ... } } void main() { Car ACar = new Car(); ACar.moveForward(5); print(ACar.current_state); }
根据Dart官方文档说明:
使用
interface修饰符定义接口时,该接口所在库之外的代码只能实现该接口,不能继承。
但上述同库内的代码中,Car类继承Vehicle并未报错,与预期不符,请问这是为什么?
原因解析
interface类的继承限制仅针对定义该类的库之外的代码生效,同库内的类不受此约束,依然可以正常继承该类。- Dart的类修饰符(包括
interface)的访问控制逻辑基于库边界设计,目的是对外仅暴露接口实现能力,同时允许库内部代码灵活复用类的结构与逻辑。 - 你代码中的
Vehicle和Car属于同一个默认库,因此Car继承Vehicle完全符合语法规则,不会触发错误。
内容的提问来源于stack exchange,提问作者JaeYeon Won
相关产品推荐
相关产品推荐

