Actionscript 3 调用子类';s重写AS3中基类的函数
我有一门课,叫做Screen: 还有一个叫做PlayScreen的课程: } 调用PlayScreen的构造函数时,也会调用Screen的构造函数。在它内部,scrStage被分配给argStage,initObjects()被调用。PlayScreen(子类)的initObjects()应该被调用,但Screen(基类)的initObjects()应该被调用 那么,当调用PlayScreen的构造函数时,您介意帮我调用PlayScreen的initObjects()吗?提前谢谢Actionscript 3 调用子类';s重写AS3中基类的函数,actionscript-3,oop,Actionscript 3,Oop,我有一门课,叫做Screen: 还有一个叫做PlayScreen的课程: } 调用PlayScreen的构造函数时,也会调用Screen的构造函数。在它内部,scrStage被分配给argStage,initObjects()被调用。PlayScreen(子类)的initObjects()应该被调用,但Screen(基类)的initObjects()应该被调用 那么,当调用PlayScreen的构造函数时,您介意帮我调用PlayScreen的initObjects()吗?提前谢谢 更新 哎呀。
更新 哎呀。 在我的项目中的其他地方调试后,我找到了以下解决方案:
//edit in Screen class
private function initObjects():void {}
//to
protected function initObjects():void {}
//or public
//and in PlayScreen class
private function initObjects():void {}
//to
protected override function initObjects():void {}
//or public
你能不能不要在屏幕下调用
initObjects
,因为它毕竟是一个空方法,然后从你的PlayScreen
中调用它:
public class Screen extends GameObject
{
//GameObject is a class extending Sprite and implemented by just some variables and methods
public static var scrStage:Stage;
public function Screen(argStage:Stage) {
scrStage = argStage;
}
}
public class PlayScreen extends Screen
{
//declares TextFields and GameObjects
public function PlayScreen(argStage:Stage) {
super(argStage);
//addChild those TextFields and GameObjects
initObjects();
}
private function initObjects():void {
// initializes those TextFields and GameObjects
}
}
initObjects()是一个私有方法,因此不会被继承。调用超类版本时,没有理由调用PlayScreen版本。你不必重写它的事实应该给了你一个线索。我不同意。那是另一种方法。我写的。但我只是不想在其他扩展Screen类的类中编写它。无论如何谢谢你的帮助。你的initObjects逻辑在屏幕的每个扩展中都不会改变吗?如果它们不改变,那么为什么不在屏幕级别实现呢?如果它们在每个扩展的基础上改变,那么除了在类的每个扩展版本下提供一个实现之外,我看不到解决方法
//edit in Screen class
private function initObjects():void {}
//to
protected function initObjects():void {}
//or public
//and in PlayScreen class
private function initObjects():void {}
//to
protected override function initObjects():void {}
//or public
public class Screen extends GameObject
{
//GameObject is a class extending Sprite and implemented by just some variables and methods
public static var scrStage:Stage;
public function Screen(argStage:Stage) {
scrStage = argStage;
}
}
public class PlayScreen extends Screen
{
//declares TextFields and GameObjects
public function PlayScreen(argStage:Stage) {
super(argStage);
//addChild those TextFields and GameObjects
initObjects();
}
private function initObjects():void {
// initializes those TextFields and GameObjects
}
}