0

スーパークラスに存在するクラスからメソッドを削除したい。@Deprecated注釈を使用してスーパークラス メソッドを非推奨にすることはできますが、サブクラスでは引き続きアクセスできます。

例えば:

public class Sample {

    void one() {}

    void two() {}

    @Deprecated
    void three() {}
}

class Sample2 extends Sample {
    @Override
    void one() {}

    public static void main() {
        Sample2 obj = new Sample2();
        obj.one();
        obj.two();
        obj.three();// I do not want to access this method through the sample 2 object.
    }
}

Sample2オブジェクトを使用している間は、メソッドのみを使用できるようにしたいonetwo考えています。これを行う方法についてアドバイスをお願いします。

どうもありがとう。

4

4 に答える 4

2

Sample2 の three() をオーバーライドし、そのメソッドがアクセスされた場合に例外をスローします。

于 2013-04-19T04:46:59.207 に答える
1

コンパイル時にできることは何もありません。スーパークラスよりもメソッドが少ないサブクラスを持つことはできません。あなたができる最善のことは、@Sudhanshuが提案するようなランタイムエラーを作成することと、IDEでエラーをフラグするためのツール(カスタムFindBugsルールなど)を作成することです。

于 2013-04-19T04:52:18.883 に答える
0

private独自のクラスでのみアクセスする必要があるメソッドの前にアクセス レベル修飾子を使用します。

public class Sample {

    void one() {}

    void two() {}

    @Deprecated
    private void three() {}
}
于 2014-08-22T12:04:30.090 に答える
0

別のクラスのインターフェースを使用中に非表示にするための 1 つのアイデアは、それを独自のオブジェクトでラップすることです (つまり、サブクラス化しないでください)。

class MySample {
    private Sample sample;
    //maybe other stuff

    public MySample(){ 
        sample = new Sample();
    }

    void one(){
        return sample.one();
    }
}

これは、潜在的に満足のいくものではありません:Sample意図された方法で完全に使用したくないと同時に、その動作をハイジャックして拡張したいと考えています。three()それはあなたの支援を求めるという問題を解決しますSample

于 2016-07-24T17:27:23.513 に答える