GDScript:关于派生类调用基类方法的一个注意事项

  • 对于普通方法,在派生类中用"."+"方法名"的方式调用基类的方法,例如:

在基类中定义了一个do_something方法

#基类
func do_something():
	print("parent:do something")

在子类中调用它:

func a_function_in_child():
	.do_something()
  • 对于_init以及_ready还有_enter_tree这样的默认方法是不需要像上面那样显示调用的,例如:

基类

extends Node
class_name ParentClass
func _ready():
	print("_ready in parent")
func _enter_tree():
	print("_enter_tree in parent")
func _exit_tree():
	print("_exit_tree in parent")

派生类

extends ParentClass

func _ready():
	pass # Replace with function body.
func _enter_tree():
	pass
func _exit_tree():
	pass

运行结果

_enter_tree in parent
_ready in parent
这意味着基类的默认方法方法无论如何都要执行,且无法覆盖的

下面试一下如果在派生类的 默认方法中显式调用一下基类的默认方法

extends ParentClass

func _ready():
	._ready()

func _enter_tree():
	._enter_tree()

func _exit_tree():
	._exit_tree()

输出结果

_enter_tree in parent
_enter_tree in parent
_ready in parent
_ready in parent

基类中的 每个默认方法执行了两遍

小结
这种形式不统一的设计稍稍有些怪异,使用时一定要注意

发布了261 篇原创文章 · 获赞 134 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/103880720