- 实现不正确:
- 原因:在
MyInterface
接口中,b
参数是可选参数(b?: string
),而在MyClass
类的实现中,b
参数变成了必选参数。并且MyInterface
中c
参数有默认值(c: boolean = true
),而MyClass
类实现时没有使用默认值。
- 修改方法:
- 方法一:使
MyClass
类的实现参数与接口完全一致,即给b
参数加上可选标识?
,并给c
参数加上默认值true
。
class MyClass implements MyInterface {
myFunction(a: number, b?: string, c: boolean = true): void {
// 函数体省略
}
}
- 方法二:如果在
MyClass
类的逻辑中,b
确实是必选参数,那么需要修改接口MyInterface
,将b
的可选标识?
去掉,同时去掉c
的默认值,使其与MyClass
类的实现匹配。
interface MyInterface {
myFunction(a: number, b: string, c: boolean): void;
}
class MyClass implements MyInterface {
myFunction(a: number, b: string, c: boolean): void {
// 函数体省略
}
}
- 默认参数与可选参数的兼容性规则及应用:
- 兼容性规则:
- 可选参数(
参数名?: 类型
)在实现时可以是必选参数,但必选参数不能在实现时变成可选参数。
- 有默认值的参数(
参数名: 类型 = 默认值
)在实现时可以省略默认值,但实现时不能改变参数的类型和位置。
- 应用:
- 接口定义时使用可选参数和默认参数可以提供更灵活的调用方式,实现类可以根据具体需求决定是否遵循接口的可选或默认参数设置。如果实现类有特殊逻辑,需要必选某个接口中定义为可选的参数,那么可能需要调整接口定义,反之亦然。这样可以保证接口的调用者在调用接口方法时,能根据接口定义的参数灵活性进行调用,同时实现类也能根据自身业务逻辑合理实现接口方法。