`

AS3中super的用法[转自A闪]

    博客分类:
  • AS3
 
阅读更多

super它到底是什么?这是我第一个问题,在帮助中石这样说明的“调用方法或构造函数的超类或父版本。在类构造函数体内使用 super() 语句时,该语句将调用构造函数的超类版本。对超类构造函数的调用必须有正确的参数数目。请注意,不管是否显式调用超类函数,都会调用到超类构造函数。如果不是显式调用它,则将在子类构造函数体中的第一个语句前自动插入不带参数的调用。这意味着,如果在子类中定义了构造函数,并且超类构造函数具有一个或多个参数,则必须显式调用具有正确参数数目的超类构造函数,否则将产生错误。然而,根据 ActionScript 2.0 的要求,对超类构造函数的调用无需是子类构造函数中的第一个语句。”说了半天也是含糊其辞,我个人的理解就是super实际上是一个超类或父类的引用。我们可以把super看做是父类的一个实例。这样就好理解多了。但实际上它并非是父类的一个实例,我这样说只是方便理解。那么我们可以怎么去使用它呢?在帮助文档中提到了两种使用方法:

super([arg1, ..., argN])
super.method([arg1, ..., argN])

先来说说第二种,因为第二种比较好理解。我写了一个例子,大家来看一下就明白了!
package 
{
/**
* ...
* @author A闪
*/
public class Flei
{

public function Flei()
{

}
public function shu():void
{
trace("a");
}

}

}

package 
{
/**
* ...
* @author A闪
*/
public class Zlei extends Flei
{

public function Zlei()
{

}
public override function shu():void
{
super.shu();
trace("b");
}

}

}

package
{
import flash.display.Sprite;
import flash.events.Event;

/**
* ...
* @author A闪
*/
public class Main extends Sprite
{

public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var a:Zlei = new Zlei();
a.shu();
}

}

}
运行这个程序,我们会看到输出ab。但是为什么会输出这个结果呢?实际上就是因为我们使用了super语句。再上面这个范例中,我们重写了了shu方法。如果重写的话,父类中的所有语句就等于被删除了!但是假如我们只希望在原来的功能上添加一些功能,怎么办呢?使用super,这样再调用一次父类的shu方法,原来的语句就被执行一次,相当于将原来的语句保留了。在此基础之上我们在添加一个新的语句。本例中就是trace("b");这个super的一种使用方法。
我们再来看另外一种使用方法。super()这个语句可以看做是父类的构造函数。什么意思呢?我们来简单的解释一下,一个父类,如果其构造函数不需要参数,那么好了!我们可以像上面那个例子中一样去使用。但是大家注意,在程序运行的时候,子类实际上是先执行一次父类的构造函数的。这个过程中,程序会自动的在子类的构造器函数中添加一个调用的语句。我们可以把它称为隐式调用。好了!现在我们将程序稍微修改一下,在Flei类文件的构造器函数中添加一个参数,代码如下:
package 
{
/**
* ...
* @author A闪
*/
public class Flei
{

public function Flei(wen:String)
{

}
public function shu():void
{
trace("a");
}

}

}
我们可以看到,父类现在在初始化的时候需要一个参数,但是在子类中使用的是隐式调用,那么程序不会像父类的构造函数中传递任何参数,此时运行程序就会报错。怎么办呢?使用super(),这个语句就是调用一次父类的构造函数,写上这个语句和不写这个语句是一样的,写上了就是显示调用。那么写上之后有什么好处呢?好处就是我们可以为父类的构造函数添加参数了~!这样就可以解决上面的错误。
看一下实例!!我们只更改子类文件:
package 
{
/**
* ...
* @author A闪
*/
public class Zlei extends Flei
{

public function Zlei()
{
super("A闪");
}
public override function shu():void
{
super.shu();
trace("b");
}

}

}
这样修改之后,大家再来运行一下影片,呵呵@!不报错了吧!super的使用就这两个,明白了就非常简单,不明白,就费劲了!不知道说的明不明白。大家有不明白的地方给我留言,我会一一解答的!~
最后总结一下,当父类的构造函数中需要参数,则在子类中构造函数中可能会出现super(参数...),这时候我们叫做显示调用。当父类的构造函数中没有参数的时候,可以不写super(),这个时候叫做隐式调用。另外,子类初始化的时候一定会先调用父类的构造函数(必须的)。
第二种用法就是把super当做一个变量,当做父类的应用,通过super.方法()或者super.属性,可以访问父类中的方法和属性。

分享到:
评论

相关推荐

    delphi 使用superobject库解析和生成json实例

    2. **添加属性**:添加属性到JSON对象,可以使用`AsObject`或`AsArray`方法创建子对象或数组,然后使用`SetProp`方法设置属性。 ```delphi JSONObj.AsObject['propertyName'] := TSuperObject.Create.Value('...

    Delphi superobject

    在 Delphi 开发环境中,SuperObject 是一个广泛使用的 JSON 解析和序列化库,它提供了高效且易用的接口来处理 JSON 数据。然而,当涉及到处理包含中文字符的 JSON 对象时,由于 SuperObject 默认采用 UNICODE 编码,...

    RAD STUDIO 11 DELPHI11 superobject使用源码

    在本教程中,我们将深入探讨 SuperObject 的使用以及如何在 Delphi 11 应用程序中集成和操作 JSON 数据。 首先,我们需要了解 SuperObject 的基本概念。SuperObject 是一个开源的 Delphi JSON 解析器和生成器,它...

    superObject.rar

    本篇文章将深入探讨SuperObject在DelphiXE8中的使用方法、核心功能以及实际应用场景。 一、SuperObject简介 SuperObject是用纯Delphi编写的一个JSON库,它支持Delphi 2009及以上版本,包括64位平台。其设计目标是...

    Delphi7版本 - X-Superobject

    X-SuperObject 是一个在 Delphi 开发环境中广泛使用的 JSON 库,特别适用于 Delphi 7 这样的较早版本。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读和易于机器解析而被广泛应用。...

    superobject.rar

    3. **序列化JSON**:如果你需要将Delphi对象转换为JSON,可以调用TSuperObject的AsJSON方法,这将返回一个表示对象的JSON字符串。 4. **错误检查**:在解析和序列化过程中,记得检查可能的错误,确保数据正确无误。...

    Delphi json superobject 支持XE10.3

    下面将详细讨论SuperObject在Delphi XE10.3中的使用、特性以及如何与JSON数据进行交互。 首先,SuperObject的核心优势在于其高度优化的C++和Pascal源代码,这使得它在处理JSON数据时具有出色的速度和内存效率。在...

    AS3类的详细介绍

    本文详细介绍了AS3中类的基本概念、结构以及如何使用包、成员变量/常量、构造函数、继承与覆盖等关键特性。掌握这些基础知识对于编写高质量的AS3程序至关重要。希望本文能帮助读者更好地理解和运用AS3面向对象编程的...

    as3 自定义类

    在ActionScript 3 (AS3)中,自定义类是一种扩展和定制标准库中已有类或者创建全新功能的方法。在给定的标题“as3 自定义类”中,重点是自定义一个按钮类,这通常是为了满足特定项目或游戏的需求,提供更灵活的设计和...

    delphi7-json-superobject

    这个库特别适用于那些需要在 Delphi 7 上运行且不能或不想使用更现代的 Delphi 版本中内置的 JSON 支持的项目。 1. **JSON 解析**: SuperObject 提供了 `OSuperObject` 类,用于解析 JSON 字符串为对象结构。你...

    superobject superxmlparser

    在Delphi编程环境中,SuperObject和SuperXMLParser是两个非常重要的库,主要用于处理JSON和XML数据格式。在本文中,我们将深入探讨这两个组件的功能、用途以及如何在Delphi7项目中使用它们。 首先,让我们来看看...

    DELPHI之superobject实现JSON格式,可实现POST

    - **遍历 JSON 对象**:你可以使用 `AsObject` 和 `AsArray` 方法来访问 JSON 对象或数组的成员,以及 `Keys()` 来获取所有键。 3. **HTTP POST 发送 JSON 数据** - **创建 HTTP 客户端**:在 Delphi 中,可以...

    DelphiXe10 Json解析类(SuperObject)

    本篇文章将深入探讨如何在Delphi XE10中使用SuperObject进行JSON解析。 首先,SuperObject的核心功能在于其提供了对JSON对象的动态访问,允许开发者以对象树的形式解析和构建JSON。它的API设计简洁,易于理解和使用...

    flex+as3项目渲染器的使用

    通过以上讲解,我们了解了Flex+AS3项目渲染器的基本使用方法和重要性。实际开发中,可以根据具体需求灵活应用和扩展,以创造出丰富多样的用户界面。学习和掌握项目渲染器的使用,能极大地提升Flex应用的用户体验和...

    superobject.zip

    《SuperObject:Delphi中的JSON处理利器》 在Delphi编程环境中,处理JSON数据是一项常见的任务,而SuperObject就是这样一个强大的工具,它为Delphi程序员提供了简洁高效的JSON解析和序列化功能。SuperObject源码的...

    superobject Json工具包 delphi

    在Delphi编程环境中,为了方便地处理JSON数据,开发者通常会使用第三方库,如"superobject"。SuperObject是一个高效的、开源的JSON解析器和生成器,专为Delphi设计,提供了一种简洁的方式来解析JSON字符串或者构建...

    AS3编译错误中文说明

    - **解释**:此错误表示尝试在非实例方法中使用 `super` 关键字。`super` 关键字只能用于类实例方法或构造函数内部。 - **解决办法**:确认使用 `super` 的上下文是实例方法或构造函数。 #### 1007 super语句只能...

    delphi superobject

    因此,当你在代码的 `uses` 部分添加 `superobject` 后,你就可以使用 SuperObject 库中的 `TSuperObject` 类,以及其他相关辅助类和方法,如 `Parse`, `AsObject`, `AsArray`, `Free`, `Clone` 等,它们可以帮助你...

    DELPHI7+superobject 1.25

    之后,你可以在你的源代码中引入 `SuperObject` 单元,并开始使用其提供的类和方法。 以下是一些使用 SuperObject 的基本示例: 1. 创建 JSON 对象: ```delphi uses SuperObject; var JSON: ISuperObject; ...

    as3 flex基础知识100条

    对于JSON,可以使用JSON对象的parse方法将JSON字符串转换为AS3对象:var jsonString:String = '{"title":"Book1"}';var jsonObject:Object = JSON.parse(jsonString);trace(jsonObject.title);【外部接口与本地调用...

Global site tag (gtag.js) - Google Analytics