2

当我扩展一个类时,我想重写方法并更改它们的可访问性,就像受保护的方法应该在某个类中是公共的。当我编译它说:“不兼容的覆盖”。我不能减少也不能增加能见度。

减少没有意义,我也不需要它,但我能够增加Java 中的方法可见性。为什么不在 ActionScript 3 中?

public class OldClass
{
    protected function doStuff() : void
    {}
}
public class NewClass extends OldClass
{
    override public function doStuff() : void
    {}
}

难道我做错了什么 ?

4

1 回答 1

5

不,你没有做错任何事。这就是语言的工作方式。从文档(强调添加):

静态方法不是继承的,也不能被覆盖。但是,实例方法由子类继承,只要满足以下两个条件,就可以被覆盖:

  • ...

  • 覆盖方法必须与基类方法具有相同级别的访问控制。标记为内部的方法与没有访问控制说明符的方法具有相同级别的访问控制。

  • 覆盖方法必须具有与基类方法相同数量的参数。

  • 覆盖方法参数必须具有与基类方法中的参数相同的数据类型注释。

  • 覆盖方法必须具有与基类方法相同的返回类型。

于 2012-12-21T07:40:58.867 回答