2007年1月14日星期日

2.6.覆盖父类方法


2.6. 覆盖父类方法

问题
我要对从父类继承过来的方法进行重新实现。
解决办法
父类的方法必须申明为public 或 protected。当申明子类的实现时使用 override 修饰符
讨论

通常子类继承父类的所有方法而不做任何修改,但有些情况,继承过来的方法需要重新申明,实现与父类的方法不同。这时就要覆盖方法,该方法必须加上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 继承 Superclass 实现的toString( ) 方法:
var example:Subclass = new Subclass( );
trace(example.toString( )); // 显示: Superclass.toString( )
如果你要 toString( ) 方法返回不同的值,就要覆盖它,如下:



package {
public class Subclass extends Superclass {
public function Subclass( ) {}
override
public function toString( ):String {
return "Subclass.toString( )";
}

}

}



覆盖方法,则该方法必须与父类的方法完全相同,包括参数数量和类型及返回类型,如果不一致,编译器就会报错。
有时你要覆盖方法是为了实现完全不同的功能,但有时你只是要增加一些东西,这时你可以调用父类方法:
super.methodName( );


没有评论: