ActionScript 中的继承

来源:互联网 发布:淘宝网变形金刚玩具 编辑:程序博客网 时间:2024/06/01 10:13

继承是指一种代码重用的形式。

继承的主要优势:

  • 允许重复使用基类中的代码,但不修改现有的代码。
  • 继承不要求改变其他类与基类交互的方式。
  • 不必修改可能已经过彻底测试或可能已被使用的现有类。
  • 使用继承可将该类视为一个集成模块。
  • 可使用其他属性或方法对它进行扩展。

使用 extends 关键字指明类从另一类继承。

通过继承还可以在代码中利用“多态”。

实例属性和继承

对于实例属性(property),无论是使用 function、var 还是使用 const 关键字定义的,只要在基类中未使用 private 属性(attribute)声明该属性(property),这些属性均可由子类继承。

访问控制说明符和继承

  • public 声明的属性对任何位置的代码可见,对属性继承没有限制。
  • private 声明的属性只在定义该属性的类中可见,不能由任何子类继承。
  • protected 声明的属性不仅在定义该属性的类中可见,而且还在所有子类中可见,不管子类和基类是否在同一包中。
  • 可使用 internal 来限制可见性,标记为 internal 的属性将只在位于在同一包中的子类继承。internal 是默认的访问控制说明符。

不允许覆盖变量

覆盖方法

覆盖方法表示重新定义已继承方法的行为。

静态方法不能继承,也不能覆盖。

实例方法可由子类继承,也可覆盖,只要满足以下两个条件:

  • 实例方法在基类中不是使用 final 关键字声明的。
  • 实例方法在基类中不是使用 private 访问控制说明符声明的。

要覆盖符合条件的实例方法,子类中的方法定义必须使用 override 关键字,且必须在以下几个方面与方法的超类版本相匹配:

  • 覆盖方法必须与基类方法具有相同级别的访问控制。标记为内部的方法与没有访问控制说明符的方法具有相同级别的访问控制。
  • 覆盖方法必须与基类方法具有相同的参数数量。
  • 覆盖方法参数必须与基类方法参数具有相同的数据类型注释。
  • 覆盖方法必须与基类方法具有相同的返回类型。

super语句

super语句允许子类中的方法引用超类。

覆盖 getter 和 setter

虽然不能覆盖超类中定义的变量,但是可以覆盖 getter 和 setter。

不继承静态属性

  • 静态属性不由子类继承,所以不能通过子类的实例访问静态属性,只能通过定义静态属性的类对象来访问静态属性。
  • 允许使用与静态属性相同的名称定义实力属性。

静态属性和作用域链

原创粉丝点击