2.6. 覆盖父类方法
问题
我要对从父类继承过来的方法进行重新实现。
解决办法
父类的方法必须申明为public 或 protected。当申明子类的实现时使用 override 修饰符
讨论
通常子类继承父类的所有方法而不做任何修改,但有些情况,继承过来的方法需要重新申明,实现与父类的方法不同。这时就要覆盖方法,该方法必须加上override 修饰符。如下面的例子,首先定义一个父类Superclass:
package ...{
public class Superclass ...{
public function Superclass( ) ...{}
public function toString( ):String ...{
return "Superclass.toString( )";
}
}
}
public class Superclass ...{
public function Superclass( ) ...{}
public function toString( ):String ...{
return "Superclass.toString( )";
}
}
}
下一步,定义Subclass 继承自Superclass:
package ...{
public class Subclass extends Superclass ...{
public function Subclass( ) ...{}
}
}
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( )";
}
}
}
public class Subclass extends Superclass ...{
public function Subclass( ) ...{}
override public function toString( ):String ...{
return "Subclass.toString( )";
}
}
}
覆盖方法,则该方法必须与父类的方法完全相同,包括参数数量和类型及返回类型,如果不一致,编译器就会报错。
有时你要覆盖方法是为了实现完全不同的功能,但有时你只是要增加一些东西,这时你可以调用父类方法:
super.methodName( );
没有评论:
发表评论