Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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 从另一个类访问受保护的函数-闪存_Actionscript 3_Flash_Inheritance_Protected - Fatal编程技术网

Actionscript 3 从另一个类访问受保护的函数-闪存

Actionscript 3 从另一个类访问受保护的函数-闪存,actionscript-3,flash,inheritance,protected,Actionscript 3,Flash,Inheritance,Protected,我有两个文件,Main.as,和Book.as 这本书的内容如下: public class Book extends sprite { protected function addPage():void { var title:Sprite = new Sprite(); addChild(title); } } 我正在尝试创建Book的一个实例,并最终将其添加到舞台上。如何访问此受保护的功能?(我不能将书籍更改为,因为它是项目的一部分) 我在Main中执行以下操

我有两个文件,
Main.as
,和
Book.as

这本书的内容如下:

public class Book extends sprite
{
  protected function addPage():void
  {
    var title:Sprite = new Sprite();
    addChild(title);
  }
}
我正在尝试创建Book的一个实例,并最终将其添加到舞台上。如何访问此受保护的功能?(我不能将
书籍更改为
,因为它是项目的一部分)

我在Main中执行以下操作

var newBook:Book = new Book();
newBook.addPage();

基本上,我如何访问
addPage
?我正在为我的主类使用
扩展Sprite

受保护的函数只能从该类或扩展它的类调用

但是看看这个类,作为一个受保护的函数是毫无用处的。要么让你需要的人公开它,要么创建其他调用它的函数(比如在构造函数中)

如果这是您在不更改
书籍的情况下绝对需要执行的操作,那么在我看来,这是您唯一的选择:

创建
Book
的子类。例如:

public class MyBook extends Book {
    public function addMe():void {
        addPage();
    }
}
现在您可以执行以下操作:

var newBook:MyBook = new MyBook();
newBook.addMe();

最简单的方法是扩展Book类(如LDMS所述),但您可以尝试反射API…AS3对私有和受保护的方法太严格,即使使用反射API也无法访问它们。这是整个
Book
类吗?最简单的一个,但是,这种方法存在一个大问题,尽管。。。如果Book类无法更改(它是lib的一部分),则很可能该类在其他地方使用,实例将移交给用户。。。如果是这种情况,扩展是不可能的。@NemoStein-True,但在问题中,这个类的唯一示例是由他们实例化的。此外,这样一个类的唯一目的是扩展。这听起来像是家庭作业。@NemoStein有一个很好的观点,但LDMS提供了访问受保护功能的绝对唯一方法。如前所述,如果作为swc的一部分,此解决方案可能最终会产生自己的问题。