Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 调用子类';s重写AS3中基类的函数_Actionscript 3_Oop - Fatal编程技术网

Actionscript 3 调用子类';s重写AS3中基类的函数

Actionscript 3 调用子类';s重写AS3中基类的函数,actionscript-3,oop,Actionscript 3,Oop,我有一门课,叫做Screen: 还有一个叫做PlayScreen的课程: } 调用PlayScreen的构造函数时,也会调用Screen的构造函数。在它内部,scrStage被分配给argStage,initObjects()被调用。PlayScreen(子类)的initObjects()应该被调用,但Screen(基类)的initObjects()应该被调用 那么,当调用PlayScreen的构造函数时,您介意帮我调用PlayScreen的initObjects()吗?提前谢谢 更新 哎呀。

我有一门课,叫做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
    }

}