2

クラスを拡張するとき、メソッドをオーバーライドして、保護されたメソッドが特定のクラスでパブリックになるように、それらのアクセシビリティを変更したいと思います。コンパイルすると、「互換性のないオーバーライド」と表示されます。視認性を下げることも上げることもできません。

減らすことは意味がなく、私はそれを必要としませんが、Javaでメソッドの可視性を高めることができました。なぜActionScript3ではないのですか?

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

私は何か間違ったことをしていますか?

4

1 に答える 1

5

いいえ、あなたは何も悪いことをしていません。それが言語の仕組みです。ドキュメントから(強調を追加):

静的メソッドは継承されず、オーバーライドできません。ただし、インスタンス メソッドはサブクラスによって継承され、次の 2 つの基準が満たされている限りオーバーライドできます。

  • ...

  • オーバーライド メソッドには、基本クラス メソッドと同じレベルのアクセス制御が必要です。internal としてマークされたメソッドには、アクセス制御指定子を持たないメソッドと同じレベルのアクセス制御があります。

  • オーバーライド メソッドには、基本クラス メソッドと同じ数のパラメーターが必要です。

  • オーバーライド メソッドのパラメーターには、基本クラス メソッドのパラメーターと同じデータ型の注釈が必要です。

  • オーバーライド メソッドは、基本クラス メソッドと同じ戻り値の型を持つ必要があります。

于 2012-12-21T07:40:58.867 に答える