0

以下に示すような設定があります。「YourClass」が実際に「MyClass」のロジックの一部を実装していることに気づきました。うーん。「YourClass」のsetupViews()の上に@Overrideをスローしようとしましたが、「DataManagerActivityタイプのメソッドsetupViews()はスーパークラスメソッドをオーバーライドする必要があります」とコンパイルされません。

コードが変更されました。それは一例でした。間違ったものを入力しました。同じ質問。MyClassを拡張するYourClassがMyClassからsetupViews()を実装しないようにするにはどうすればよいですか?

public class MyClass extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}



public class YourClass extends MyClass {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setupViews();
        ...

    }

    private void setupViews() {

        ....

    }
}
4

2 に答える 2

2

@Overrideextendその下にあるメソッドがスーパークラス(元のメソッド)またはそれが実装するメソッドの1つをオーバーライドしない限り、コンパイラーに失敗するように指示しますinterface

編集:申し訳ありませんが、あなたの意図を誤解した可能性があります。オーバーライドできない理由setupViews()は、サブクラスからアクセスしたりオーバーライドしたりできないprivateようにMyClassなっているためです。

それが必要な場合は、メソッドをprotected、定義されているクラスのサブクラスでアクセス可能でオーバーライド可能にする必要がありますが、外部からはアクセスできません。

2'を編集:つまり、結論:

setupViews()サブクラス(などYourClass)でオーバーライドできるようにする場合は、それを作成しprotectedます。それ以外の場合は、それを作成しprivateます。

于 2011-03-02T20:08:59.860 に答える
1

使いたいと思います this.setupViews();

于 2011-03-07T19:32:13.633 に答える