2

このタイプの親クラスでプライベート メソッドを呼び出すにはどうすればよいですか? 私がやったことは醜いコードですが、実際の解決策ではないと思いますが、機能します。

これがどのように行われるかについてアドバイスをいただければ幸いです。私は解決策を見つけようとしましたが、問題を明確にすることはできませんでした。

    public abstract class Car {

         public void passItOn(int a) {

                takesVariable(a);

         }
    private void takesVariable(int a) {

         //Process the variables
    }

子供:

     public abstract class Wheel extends Car {

     boolean a = anotherMethod();
        if(value() != a) {
          passItOn(a);
        }

     }

私の受け入れ率にはいくつかの問題がありますが、私はそれに取り組んでいます!すべての返信に + マークが付きます!!!

4

5 に答える 5

10

セキュリティマネージャが許可している場合は、リフレクションを使用し てプライベートフィールド/メソッドにアクセスできますが、強くお勧めしません。

プライベートメソッドは、理由によりプライベートです。基本クラスにアクセスできる場合は、メソッドを作成する方protectedがはるかに優れたソリューションです。

于 2012-12-18T16:26:09.810 に答える
4

プライベート メソッドは継承されないため、呼び出すことができません。本当にこのメソッドにアクセスしたい場合は、アクセス修飾子キーワード (protectedまたはpublic) を変更してください。

于 2012-12-18T16:17:11.147 に答える
2

Do this if you are fine with making it protected:

public class BaseClass {
    protected void whatever() {}
}

または、これを何らかの理由で非公開にしたい場合は、基本クラスが「何でも」をいつどのように使用するかをより詳細に制御できます。

public class BaseClass {
    private void whatever() {}
    protected void doWhatever() {
        if(!forSomeReasonDoNotWantThisToBeUsed()) {        
            whatever();
        }
    }
}
于 2012-12-18T16:20:14.943 に答える
1

protectedサブクラスから到達したい場合は作成してください。

于 2012-12-18T16:17:53.940 に答える
1

There is absolute no way this can be done. You cannot call a private method of a class from any other class(be it the extending class). It can only be accessed inside that class itself. There is a reason it is said to be private.

If you want it to be accessed by only the extending classes an not the outside world then use protected access modifier for your function.

于 2012-12-18T16:20:13.850 に答える