构造函数里面super的用法

最近有不少网友在问这个super的用法,今天就写了个例子来给大家讲讲!
  先看看官方帮助文档是怎么说的:
  
  调用方法或构造函数的超类或父版本。在类构造函数体内使用 super() 语句时,该语句将调用构造函数的超类版本。对超类构造函数的调用必须有正确的参数数目。请注意,不管是否显式调用超类函数,都会调用到超类构造函数。如果不是显式调用它,则将在子类构造函数体中的第一个语句前自动插入不带参数的调用。这意味着,如果在子类中定义了构造函数,并且超类构造函数具有一个或多个参数,则必须显式调用具有正确参数数目的超类构造函数,否则将产生错误。然而,根据 ActionScript  2.0 的要求,对超类构造函数的调用无需是子类构造函数中的第一个语句。 在实例方法体中使用时,super 可以与 dot (.) 运算符共同使用以调用方法的超类版本,并可以选择将参数 (arg1 ... argN) 传递给超类方法。这对于创建某些子类方法很有用,这些子类方法在向超类方法添加附加行为的同时,又调用这些超类方法执行其原始行为。
在静态方法中不能使用 super 语句。

  

  好了下面是我写的例子,关键的知识点在代码里都有注释!
  先写个父类SuperClass:
  package  
{
import flash.display.Sprite;

/**
  * ...
  * @author .....Li灬Star
  * @contact...QQ:168527720
  */
public class SuperClass extends Sprite
{
  public var superType:String;
  
  
  /**
   * 构造函数不带参数
   */
  
  /*public function SuperClass() 
  {
   trace("Super_Star");
  }*/
  
  
  /**
   * 构造函数带参数
   */
  
  public function SuperClass(_superType:String) 
  {
   superType = _superType;
  }
  
  public function superFun():void {
      trace("superFun");
  }
}

}
  

  然后写个子类SubClass来继承这个父类
  package  
{
/**
  * ...
  * @author .....Li灬Star
  */
public class SubClass extends SuperClass
{
  
  public function SubClass() 
  {
   /**
    * 在子类构造函数中使用super()叫显示调用
    * 不使用super()的话,编译器会在子类构造函数第一个语句前自动调用父类的构造函数,这叫隐式调用
    * 如果父类的构造函数有参数的话,则必须显示调用,而且要有正确的参数数目
    * 子类在初始化时一定会先执行父类的构造函数,不管是显式的还是隐式的
    */
   
   //super(); //父类构造函数不带参数时,可隐式调用或显示调用,不管写不写super(),都会输出Super_Star
   super("subType"); //父类构造函数带参数时,则要写入正确的参数值
   
  }
  
}

}
最后是主类Main:
  package 
{
import flash.display.Sprite;
import flash.events.Event;

/**
  * ...
  * @author .....Li灬Star
  * @contact...QQ:168527720
  */
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 _subClass:SubClass = new SubClass();
   trace(_subClass.superType); //subType
   _subClass.superFun(); //调用父类方法,输出superFun
  }
  
}

}

 

                                               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值