如何组织多层次的类继承?

问题描述 投票:0回答:1

关于该语言的注意事项:它具有可以相互继承的类。如果后代类具有与祖先类中的函数同名的函数,则祖先类中的函数对于后代的实例根本不会运行。

问题:我想知道创建扩展祖先类行为而不覆盖其中任何一个的函数的最佳方法是什么。

我现在正在做的伪代码:

class_name Animal

func _doSomething():
  #do something common to "Animal"
  _doSomething_descendantOfAnimal()

func _doSomething_descendantOfAnimal():
  #no behaviour here, since it will be overridden by descendants

扩展“Animal”的另一个类的代码

class_name Feline
extends Animal

func _doSomething_descendantOfAnimal():
  #behaviour common to "Feline"
  _doSomething_descendantOfFeline()
 
func _doSomething_descendantOfFeline():
  #no behaviour here

扩展“Feline”的另一个类的代码

class_name HouseCat
extends Feline

func _doSomething_descendantOfFeline():
  #behaviour specific to "HouseCat"

这个组织意味着,当我在

_doSomething()
实例上调用
HouseCat
时,
Animal
Feline
的共同行为将在 HouseCat 本身的任何特定行为之外运行
。尽管如此,我觉得有一种更干净、更有效的做事方式。例如,不需要我向每个可能由另一个类扩展的类添加空白函数(如 
_doSomething_descendantOfFeline()
)。

inheritance code-organization gdscript
1个回答
0
投票
您通常会做的是:让函数重写父类的函数,并使用调用父类函数的代码。它的 GDScript 语法是

.

对于 Godot 4 中的 GDScript 2.0,它是 super.

Godot 4.1 官方文档的示例:

func some_func(x): super(x) # Calls the same function on the parent class.
参见 

GDScript 基础知识:类继承(最新稳定版本)

Godot 3.6 示例:

func some_func(x): .some_func(x) # Calls the same function on the parent class.
请参阅 

GDScript 基础知识:类继承 (Godot 3.6)

© www.soinside.com 2019 - 2024. All rights reserved.