面试题答案
一键面试- 通过组合设计类型结构:
- 首先定义基础的
GameObject
结构体,包含通用属性和方法。 - 然后
Player
和Enemy
结构体通过组合GameObject
结构体来扩展功能。 - 在Go语言中的示例代码如下:
- 首先定义基础的
package main
import "fmt"
// GameObject 基础游戏对象结构体
type GameObject struct {
Name string
Position struct {
X, Y float32
}
}
// Player 玩家结构体,通过组合GameObject扩展
type Player struct {
GameObject
}
// Attack 玩家的攻击方法
func (p *Player) Attack() {
fmt.Printf("%s 玩家发动攻击\n", p.Name)
}
// Enemy 敌人结构体,通过组合GameObject扩展
type Enemy struct {
GameObject
}
// Attack 敌人的攻击方法,实现与玩家不同
func (e *Enemy) Attack() {
fmt.Printf("%s 敌人发动攻击\n", e.Name)
}
- 处理方法重写问题:
- 在这种组合的方式下,
Player
和Enemy
的Attack
方法是各自独立定义的,不存在传统继承中的“方法重写”概念。 - 因为它们通过组合的方式拥有自己独立的
Attack
方法实现,调用时直接通过各自结构体实例调用。 - 例如:
- 在这种组合的方式下,
func main() {
player := Player{
GameObject: GameObject{
Name: "玩家1",
Position: struct {
X, Y float32
}{X: 10, Y: 10},
},
}
enemy := Enemy{
GameObject: GameObject{
Name: "敌人1",
Position: struct {
X, Y float32
}{X: 20, Y: 20},
},
}
player.Attack()
enemy.Attack()
}
在上述代码中,Player
和 Enemy
各自实现了自己的 Attack
方法,通过各自的实例调用,不会出现混淆,也就不需要处理传统继承中的方法重写冲突问题。