积少成多Flash(2) - ActionScript 3.0 基础之包、类、包外类、命名空间、属性、方法、接口和继承

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
[索引页]
[源码下载]


积少成多Flash(2) - ActionScript 3.0 基础之包、类、包外类、命名空间、属性、方法、接口和继承


作者: webabcd


介绍
Flash ActionScript 3.0 是一种面向对象的语言,包、类、包外类、命名空间、属性、方法、接口和继承


示例
FunctionTest.as
package actionScript 

        import flash.display.Sprite; 
         
        public class FunctionTest extends Sprite 
        { 
                public function FunctionTest() 
                { 
                         
                } 
                 
                // 减法 
                public function Subtract(a:int, b:int):int 
                { 
                        // 参数总数 
                        trace(arguments.length); 
                        // output: 2 
                         
                        // 第一个参数 
                        trace(arguments[0]); 
                        // output: “参数 a 的值” 
                         
                        // 第二个参数 
                        trace(arguments[1]); 
                        // output: “参数 b 的值” 
                         
                        // 返回a - b 
                        return a - b; 
                } 
                 
                // 加法(args - 任意多参数) 
                public function Add(s:String, args):String 
                { 
                        var i:int = 0; 
                         
                        // 枚举出 args 中的所有参数 
                        for each(var v in args) 
                        { 
                                i += v; 
                        } 
                         
                        return s + ": " + i; 
                } 
        } 
}
 
PropertyTest.as
package actionScript 

        import flash.display.Sprite; 
         
        public class PropertyTest extends Sprite 
        { 
                // 属性 
                public var nickname:String; 
                public var age:int; 
                 
                private var _salary:int; 
                 
                public function PropertyTest() 
                { 
                         
                } 
                 
                // getter方法 
                public function get salary():int 
                { 
                        return this._salary; 
                } 
                 
                // setter方法 
                public function set salary(s:int):void 
                { 
                        this._salary = s; 
                } 
        } 
}
 
StaticTest.as
package actionScript 

        import flash.display.Sprite; 
         
        public class StaticTest extends Sprite 
        { 
                // 静态属性 
                public static const nickname:String = "webabcd"; 
                public static var age:int; 
                 
                public function StaticTest() 
                { 
                         
                } 
                 
                // 静态方法 
                public static function hello(s:String):String 
                { 
                        return "hello: " + s; 
                } 
        } 
}
 
ParentTest.as
package actionScript 

        import flash.display.Sprite; 
         
        public class ParentTest extends Sprite 
        { 
                public function ParentTest() 
                { 
                         
                } 
                 
                // ParentTest为基类,其内定义了一个名为hello()的方法 
                public function hello(s:String):String 
                { 
                        return "hello: " + s; 
                } 
        } 
}
 
ChildTest.as
package actionScript 

        import actionScript.ParentTest; 
         
        // ChildTest类继承自ParentTest类 
        // final代表禁止继承 
        public final class ChildTest extends ParentTest 
        { 
                public function ChildTest() 
                { 
                         
                } 
                 
                // 重写基类(ParentTest)中的hello()方法 
                public override function hello(s:String):String 
                { 
                        // super为对基类的引用 
                        return "基类的hello()方法 - " + super.hello(s) + ";子类重写后的hello()方法 - 您好: " + s; 
                } 
        } 
}
 
china.as
package actionScript 

        // 定义一个名为china的命名空间 
        // 注:actionScript目录下必须要有名为china.as的文件 
        public namespace china; 
}
 
usa.as
package actionScript 

        // 定义一个名为usa的命名空间 
        // 注:actionScript目录下必须要有名为usa.as的文件 
        public namespace usa; 
}
 
NamespaceTest.as
package actionScript 

        import flash.display.Sprite; 
         
        // 使用命名控件 
        use namespace china; 
        use namespace usa; 
         
        public class NamespaceTest extends Sprite 
        { 
                         
                public function NamespaceTest() 
                { 
                         
                } 
                 
                // china命名空间的hello()方法 
                china function hello(s:String):String 
                { 
                        return "您好: " + s; 
                } 
                 
                // usa命名空间的hello()方法 
                usa function hello(s:String):String 
                { 
                        return "hello: " + s; 
                } 
        } 
}
 
InterfaceTest.as
package actionScript 

        // 定义一个接口,该接口有一个方法 
        public interface InterfaceTest 
        { 
                function writeLog():String; 
        } 
}
 
InterfaceTestA.as
package actionScript 

        // 实现InterfaceTest接口 
        // 在同一个包中,所以不需要import InterfaceTest 
        public class InterfaceTestA implements InterfaceTest 
        { 
                // 实现InterfaceTest接口的writeLog()方法 
                public function writeLog():String 
                { 
                        return "记录日志到SQL Server数据库"; 
                } 
        } 
}
 
InterfaceTestB.as
package actionScript 

        // 实现InterfaceTest接口 
        // 在同一个包中,所以不需要import InterfaceTest 
        public class InterfaceTestB implements InterfaceTest 
        { 
                // 实现InterfaceTest接口的writeLog()方法 
                public function writeLog():String 
                { 
                        return "记录日志到XML文件"; 
                } 
        } 
}
 
OO.as
package 

        import flash.display.Sprite; 
         
        // 导入actionScript目录下的所有包 
        import actionScript.*; 
         
        public class OO extends Sprite 
        { 
                public function OO() 
                { 
                        // internal - 包内访问(默认) 
                        // public - 完全公开 
                        // private - 仅当前类可访问 
                        // protected - 子类可访问 
                         
                        // 用函数表达式定义函数 
                        var hello:Function = function(s:String):String 
                        { 
                                return "hello: " + s; 
                        } 
                        trace(hello("webabcd")); 
                        // output: hello: webabcd 
                         
                        // 方法 
                        showFunction(); 
                         
                        // 属性、getter方法和setter方法 
                        showProperty(); 
                         
                        // 静态属性和静态方法 
                        showStatic(); 
                         
                        // 包外类 
                        showPackageOut(); 
                         
                        // 命名空间 
                        showNamespace(); 
                         
                        // 继承、基类和子类 
                        showInherit(); 
                         
                        // 接口 
                        showInterface(); 
                } 
                 
                // 方法 
                function showFunction():void 
                { 
                        var ft:FunctionTest = new FunctionTest(); 
                         
                        trace(ft.Subtract(300, 100)); 
                        // output: 200 
                         
                        trace(ft.Add("webabcd", 1, 2, 3, 4, 5)); 
                        // output: webabcd: 15 
                } 
                 
                // 属性、getter方法和setter方法 
                function showProperty():void 
                { 
                        var pt:PropertyTest = new PropertyTest(); 
                        pt.nickname = "webabcd"; 
                        pt.age = 27; 
                        pt.salary = 1000; 
                         
                        trace(pt.nickname); 
                        // output: webabcd 
                         
                        trace(pt.age); 
                        // output: 27 
                         
                        trace(pt.salary); 
                        // output: 1000 
                } 
                 
                // 静态属性和静态方法 
                function showStatic():void 
                { 
                        trace(StaticTest.nickname); 
                        // output: webabcd 
                         
                        StaticTest.age = 27; 
                         
                        trace(StaticTest.age); 
                        // output: 27 
                         
                        trace(StaticTest.hello("webabcd")); 
                        // output: hello: webabcd 
                } 
                 
                // 包外类 
                function showPackageOut() 
                { 
                        var po:PackageOut = new PackageOut(); 
                         
                        trace(po.hello("webabcd")); 
                        // output: hello: webabcd 
                } 
                 
                // 命名空间 
                function showNamespace() 
                { 
                        // 使用命名空间 
                        // use namespace 不受上下文的影响,编译时会被自动地提到前端 
                        use namespace china; 
                         
                        var n:NamespaceTest = new NamespaceTest(); 
                         
                        trace(n.hello("webabcd")); 
                        // output: 您好: webabcd 
                         
                        // 使用命名空间名称限定符 
                        trace(n.usa::hello("webabcd")); 
                        // output: hello: webabcd 
                } 
                 
                // 继承、基类和子类 
                function showInherit() 
                { 
                        var ct:ChildTest = new ChildTest(); 
                         
                        trace(ct.hello("webabcd")); 
                        // output: 基类的hello()方法 - hello: webabcd;子类重写后的hello()方法 - 您好: webabcd 

                        trace(ct is ParentTest); 
                        // output: true 
                } 
                 
                // 接口 
                function showInterface() 
                { 
                        var a:InterfaceTest = new InterfaceTestA(); 
                         
                        trace(a.writeLog()); 
                        // output: 记录日志到SQL Server数据库 
                         
                        trace(a is InterfaceTest); 
                        // output: true 
                         
                        var b:InterfaceTest = new InterfaceTestB(); 
                         
                        trace(b.writeLog()); 
                        // output: 记录日志到XML文件 
                         
                        trace(b is InterfaceTest); 
                        // output: true 
                } 
        } 


// 包外类(只有当前类文件中的成员类可以访问) 
class PackageOut 

        public function hello(s:String):String 
        { 
                return "hello: " + s; 
        } 
}
 
 





     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/342181 ,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 缓存 Dart
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
类和成员的可见性,这在基于库或包的开发中非常重要,Dart中提供了工厂构造函数,可以方便的实现单例、缓存实例对象、返回子类等,以及常量构造函数的使用......
275 0
[Flutter]足够入门的Dart语言系列之面向对象:类成员的可见性、常量和工厂构造函数详解
|
20天前
|
开发框架 前端开发 JavaScript
在各种开发项目中使用公用类库的扩展方法,通过上下文方式快速调用处理函数
在各种开发项目中使用公用类库的扩展方法,通过上下文方式快速调用处理函数
|
2月前
|
数据安全/隐私保护 C++
C++语言深入理解类的封装与数据隐藏
深入理解类的封装与数据隐藏
|
2月前
|
程序员 C语言 C++
【C++语言】继承:类特性的扩展,重要的类复用!
【C++语言】继承:类特性的扩展,重要的类复用!
|
3月前
|
JavaScript 开发者 索引
【亮剑】探讨了在TypeScript中为对象动态添加属性的三种方式
【4月更文挑战第30天】本文探讨了在TypeScript中为对象动态添加属性的三种方式:1) 使用索引签名允许添加任意属性,如`[key: string]: any`;2) 通过接口和类型别名提供编译时类型检查,例如`interface Person { name: string; age: number; }`;3) 利用类创建具有属性的对象,如`class Person { name: string; age: number; }`。每种方法有其适用场景,开发者可根据需求选择。
414 0
|
Java
Java面向对象(1)--对象的创建使用类的实例化
Java面向对象(1)--对象的创建使用类的实例化
76 1
|
Java
Java面向对象(2)--类的成员属性
Java面向对象(2)--类的成员属性
69 0
Java面向对象(2)--类的成员属性
|
数据可视化
理解 Delphi 的类(三) - 初识类的属性
理解 Delphi 的类(三) - 初识类的属性
172 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
171 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
147 0
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )