当前位置: 代码迷 >> Web前端 >> final修饰符的功用
  详细解决方案

final修饰符的功用

热度:400   发布时间:2012-10-07 17:28:51.0
final修饰符的作用

一般来说,当用final修饰符修饰父类时的方法时,子类不能重写此方法;当用final修饰符修饰类是,此类讲不能被继承。

提示:ActionScript 3.0中的final修饰符与Jave中的不同,在Java中,final修饰符经常用来定义变量,即字符串、数字等常量一般都会用 public static final 修饰,而在ActionScript 3.0中,常量一般由public static 修饰,而也就是说final修饰符不能修饰变量或常量,只能修饰方法和类。

使用final修饰方法一般出于这样的目的:当类中某个方法所提供的功能已经能满足需求,即无需要再进行修改或扩展,之类可以继承这样的方法但不能重新或覆盖次方法。

class Person{

???????? public function Person{

???????? }

???????? public final function finalFun ():void{

?????????????????? trace("this is a final function");

???????? }

}

class Teacher extends Person{

????????? public function Teacher{

????????? }

???????? //错误,final方法不能被重写

???????? pubic overrid function finalFun():void{

???????? }

}

因此,用final修饰的方法可以防止该方法在子类中被重写。

同样,如果某个类设计得非常完美,并不需要修改或扩展时,此类就可以用final 修饰。例如,顶级类中的Math类用public final 修饰,flash.display包中的Graphics类也用public final 修饰。

Math类的部分伪代码如下:

package{

?????? public final class Math{

???????????????? public static const PI:Number= 3.141592653589793

???????????????? public static function cos(angleRadians:Number):Number{

???????????????? }

??????? }

}

看到这里,读者可能有些意外,Math类的cos()方法为什么不用fina修饰呢?这是因为Math类已经是final修饰的了,Math类所有方法自然而然地也就是final了,换句话说,再用final修饰cos()方法纯属画蛇添足。

如果用户不小心继承了final修饰的类,Flash讲提示“基类是fina类”的错误。

package{

?????? public class Test extends Mah{

?????? }

}

因此,ongoingfinal修饰类能阻止此类继承。

用final修饰类后,此类就不能被继承,但并不等于不能扩展类的功能。因为类和类的关系有很多,继承只是其中一种关系,不能使用继承可以用聚合等其他的关系。

  相关解决方案