as3——跳出方法,getter and setter,子类实施超类的译本
来源:互联网 发布:mac迁移照片文件夹 编辑:程序博客网 时间:2024/06/05 06:26
如何跳出一个方法?
在方法内最后一条语句执行后,该方法会自动结束。用return语句可以提前跳出结束该方法。
return语句跳出当前的方法且ActionScript编译程序会继续执行方法中最初的代码。方法中在return语句后面的任何语句都被忽略。
private function sampleFunction ( ):void {
return;
trace("Never called");
}
// Called from within another method:
sampleFunction( );
// Execution continues here after returning from the sampleFuction( ) invocation
上面的例子中,return语句结束了方法中的任何动作,因此这不是一种有用的方法。更普遍的,你可以用return语句在特殊的条件下跳出一个方法。这是一个如果密码错误跳出该方法的例子:
private function checkPassword (password:String):void {
// If password is not "SimonSays", exit the function.
if (password != "SimonSays") {
return;
}
// Otherwise, perform the rest of the actions.
showForm ("TreasureMap");
}
// This method call uses the wrong password, so the
// function exits.
checkPassword("MotherMayI");
// This method call uses the correct password, so the function
// shows the TreasureMap form.
checkPassword("SimonSays");
在上面的例子中,你可能注意到了这个方法被声明为void,然而在含有return语句的方法中没有的得到编译错误。当return语句用来简单的跳出方法时,在声明为void的方法中也是有效的。
然而,如果你要用这种方式return一个值的话,就会出现编译错误。
private function sampleMethod ( ):void {
return "some value"; // This causes the compiler to generate an error.
}
注意:在ActionScript2.0中是Void,在ActionScript3.0中它变成了小写void。
像方法一样创建属性的行为
用隐性的getters和setters。
所有的属性应当声明为private或protected。public属性因封装的原不是一个好方式。应该力求良好的封装。这意味着,一个类不能暴露它内在的容易被破坏的属性;public属性能被开发者轻易的破坏一个类或类的实例。看看下面使用public属性的简单事例:
package {
public class Counter {
public var count:uint;
public function Counter( ) {
count = 0;
}
}
}
你可以构造一个Counter实例,并且改变count属性的值。
var counter:Counter = new Counter( );
counter.count++;
然而,如果这个程序规定的商业规则要求一个Cound不能超过100呢?你可以看到含有public count属性的Counter类很容易破坏这个规则。
一种方法是用显式的getters和setters,看下面的例子:
package {
public class Counter {
private var _count:uint;
public function Counter( ) {
_count = 0;
}
public function getCount( ):uint {
return _count;
}
public function setCount(value:uint):void {
if(value < 100) {
_count = value;
}
else {
throw Error( );
}
}
}
}
另一种方法是用隐式的getters和setters。隐式的getters和setters像方法一样定义,但是看起来像属性。
下面是一个getter的语法:
public function get name( ):Datatype {
}
一个setter的语法:
public function set name(value:Datatype):void {
}
下面用隐式getter和setter方法声明count:
package {
public class Counter {
private var _count:uint;
public function Counter( ) {
_count = 0;
}
public function get count( ):uint {
return _count;
}
public function set count(value:uint):void {
if(value < 100) {
_count = value;
}
else {
throw Error( );
}
}
}
}
然后你可以像个public属性那样处理count:
counter.count = 5;
trace(counter.count);
在子类中执行一个方法怎样让它与在超类中不同?
这个超类的方法必须定义为public或protected。当决定在子类中运行时使用override特性。
通常子类直接继承超类的所有方法不需要改变实施。那些情况下,在子类的这些方法不需要再次定义。然而,有些情况子类实施一个不同于超类的方法。当这种情况发生,你必须放弃这种方法。要这样做,在超类中的方法必须定义为public或protected。然后可以用override特性在子类中定义该方法。举一个例子,首先定义一个类,Superclass:
package {
public class Superclass {
public function Superclass( ) {}
public function toString( ):String {
return "Superclass.toString( )";
}
}
}
接下来,定义Subclass使它继承Superclass:
package {
public class Subclass extends Superclass {
public function Subclass( ) {}
}
}
自然,Subclass继承了toString()方法因为在超类中它被执行了。
var example:Subclass = new Subclass( );
trace(example.toString( )); // Displays: Superclass.toString( )
假如你要子类的toString()方法返回一个不同的值,就需要在超类中放弃它,象下面的:
package {
public class Subclass extends Superclass {
public function Subclass( ) {}
override public function toString( ):String {
return "Subclass.toString( )";
}
}
}
当放弃一个方法时,必须有和超类完全相同的签字。这就是说数字、参数类型和子类放弃的返回类型都必须完全和超类相同。假如不相同,编辑者抛出一个错误。
有时你放弃一个方法,想让子类的实施完全不同于超类。有时只是想要增加超类的实施。在这样的情况下,你可以用super关键词引用超类从子类运行超类的实施:
super.methodName( );
- as3——跳出方法,getter and setter,子类实施超类的译本
- Socket类的getter和setter方法
- Socket类的getter和setter方法
- Objective-C类的setter方法getter方法如何写
- Socket类的getter和setter方法(1)
- Socket类的getter和setter方法(2)
- About Setter and Getter
- C++ getter and setter
- Getter and setter
- ES6 getter and setter
- 黑马程序员——OC 基础:setter和getter方法
- 玩转Eclipse — 自动生成setter和getter方法
- 玩转Eclipse — 自动生成setter和getter方法
- Struts2的getter()和setter()方法
- 生成getter与setter的方法
- Object_C的setter、getter方法实现
- scala属性的getter和setter方法
- idea添加getter、setter方法的快捷键
- 编译指令#pragma详解
- vb.net与c#的语法区别
- Insus.NET:七道最经典的asp.net页面传值题
- linux下JDK安装
- 2008手机增值产品最值得投资期待50佳
- as3——跳出方法,getter and setter,子类实施超类的译本
- 二进制文件处理
- PHP 中实现 Singleton 模式和 Monostate 模式
- 关于UNICODE和_T宏
- 【转贴】Tomcat发布项目方法
- petshop4.0 详解之六(PetShop表示层设计)
- STL之 - 排序函数疯狂练习了一把
- 空指针检测
- 我的第一篇文章