记要(2): 类与接口 转万一博客
第一个自定义类的尝试:
//先新建一个 ActionScript 3.0 工程保存
//然后, 新建 ActionScript 3.0 类, 根据向导随意取类名为 CTest, 自动生成代码如下:
package {
public class
CTest {
public function CTest() { //与类同名的方法是构造方法
trace("Hello CTest!"); //这行是手动添加,
修改文件后须先保存再测试运行
}
}
}
//把类文件(CTest.as)保存在和当前工程相同的目录, 然后在工程的时间轴的第一帧的动作中写入:
var obj:CTest = new CTest();
//然后测试运行, 会看到测试输出: Hello CTest!
关于包名与类名:
//上面创建的 CTest 类属于一个包(package), 包的名称用来指示文件路径; 上面的匿名包指示文件和 *.fla 在相同目录
//如果要把 CTest.as 保存在工程目录下的 AAA\BBB\, 则包名应该是 AAA.BBB; 推断: 如果某个目录下有多个 *.as 文件, 其中的包名必须是一致的
package AAA.BBB {
public class
CTest {
public function Method1() { trace("Method1"); }
public function Method2() { trace("Method2"); }
}
}
import AAA.BBB.CTest; //在输入代码时, 这行会自动加入; 可用 import AAA.BBB.*; 导入目录下的所有包
var obj:CTest = new CTest(); //也可写作 var obj:AAA.BBB.CTest = new AAA.BBB.CTest(); 但如果没有命名冲突就没必要了
obj.Method1();
obj.Method2();
//每个包中只能有一个类, 这个类的名称必须与文件名相同; 文件中可以有其它辅助类, 但必须放在包外.
//一个源文件中也许会没有包、没有类, 只有一些常量或变量.
//包还可以嵌套, 如官方提供的 flash.display 包就属于 flash 包; 不过自己写程序应该用不着嵌套包.
类与类成员的可见性:
dynamic //动态类, 可在运行时向实例添加成员
final //密封类,
不能被继承
internal //包内可见(默认)
public //包内外可见(常用)
internal
//包中可见(默认)
private
//类中可见
protected
//类及派生类中可见
public
//类内外、包内外都可见
static
//静态成员; 属于该类但不属于该类的实例
UserDefinedNamespace //使用自定义的命名空间指定可见性
静态成员与实例成员:
//类的静态成员通过类名调用, 类的实例成员通过实例化后的对象调用
//---------------------------------
package {
public class
CTest {
public static var fCount:int =
0;
//静态变量
public static const PI =
3.14;
//静态常量
public static function Method1() { trace("Method1"); } //静态方法
public function Method2() { trace("Method2");
}
//实例方法
}
}
//---------------------------------
CTest.fCount = 123;
trace(CTest.fCount);
trace(CTest["fCount"]);
trace(CTest.PI);
trace(CTest["PI"]);
CTest.Method1();
CTest["Method1"]();
var obj:CTest = new CTest();
obj.Method2();
obj["Method2"]();
//AS3 还允许静态方法与实例方法同名, 但没理由这样用.
关于构造函数:
//AS3 中的类只能有一个构造函数, 因其可见性必须是公开的所以可以省略 public, 构造函数不能有返回值.
//如果不定义, 系统将使用无参的默认构造函数
//---------------------------------
package {
public class
CTest {
public var fStr:String;
public function CTest(str:String) { fStr = str; }
}
}
//---------------------------------
var obj:CTest = new CTest("ABC");
trace(obj.fStr);
使用属性:
//---------------------------------
package {
public class
CTest {
private var fCount:int = 0;
public function get Count():int { return fCount; }
//先新建一个 ActionScript 3.0 工程保存
//然后, 新建 ActionScript 3.0 类, 根据向导随意取类名为 CTest, 自动生成代码如下:
package {
}
//把类文件(CTest.as)保存在和当前工程相同的目录, 然后在工程的时间轴的第一帧的动作中写入:
var obj:CTest = new CTest();
//然后测试运行, 会看到测试输出: Hello CTest!
关于包名与类名:
//上面创建的 CTest 类属于一个包(package), 包的名称用来指示文件路径; 上面的匿名包指示文件和 *.fla 在相同目录
//如果要把 CTest.as 保存在工程目录下的 AAA\BBB\, 则包名应该是 AAA.BBB; 推断: 如果某个目录下有多个 *.as 文件, 其中的包名必须是一致的
package AAA.BBB {
}
import AAA.BBB.CTest; //在输入代码时, 这行会自动加入; 可用 import AAA.BBB.*; 导入目录下的所有包
var obj:CTest = new CTest(); //也可写作 var obj:AAA.BBB.CTest = new AAA.BBB.CTest(); 但如果没有命名冲突就没必要了
obj.Method1();
obj.Method2();
//每个包中只能有一个类, 这个类的名称必须与文件名相同; 文件中可以有其它辅助类, 但必须放在包外.
//一个源文件中也许会没有包、没有类, 只有一些常量或变量.
//包还可以嵌套, 如官方提供的 flash.display 包就属于 flash 包; 不过自己写程序应该用不着嵌套包.
类与类成员的可见性:
dynamic
final
internal //包内可见(默认)
public
internal
private
protected
public
static
UserDefinedNamespace //使用自定义的命名空间指定可见性
静态成员与实例成员:
//类的静态成员通过类名调用, 类的实例成员通过实例化后的对象调用
//---------------------------------
package {
}
//---------------------------------
CTest.fCount = 123;
trace(CTest.fCount);
trace(CTest["fCount"]);
trace(CTest.PI);
trace(CTest["PI"]);
CTest.Method1();
CTest["Method1"]();
var obj:CTest = new CTest();
obj.Method2();
obj["Method2"]();
//AS3 还允许静态方法与实例方法同名, 但没理由这样用.
关于构造函数:
//AS3 中的类只能有一个构造函数, 因其可见性必须是公开的所以可以省略 public, 构造函数不能有返回值.
//如果不定义, 系统将使用无参的默认构造函数
//---------------------------------
package {
}
//---------------------------------
var obj:CTest = new CTest("ABC");
trace(obj.fStr);
使用属性:
//---------------------------------
package {