14

私は最近 (4 日前) に Java でプログラミングを始めました。私は、C++ と PHP の全体的なプログラミング経験があります。私の質問は、JAVA ですべてのクラスで利用できる関数を実装できるかどうかです。いくつかの場所 (ログ イベント、エラーなど) で呼び出す必要があるグローバル ロギング関数を考えています。

A と B の 2 つのクラスがあるとします。両方でロギング関数を呼び出す必要がありますが、関数本体全体をコピーしたくなく (ひどいことだと思います)、それを厳密に呼び出したい (別のクラスを作成せずに)クラス、インスタンス化、およびインスタンスからの呼び出し)、のようにlogEvent(someVariable)。したがって、AとBが拡張する抽象クラスCを使用する必要がありますが、それらはすでに他のクラス(組み込み)の拡張です。多重継承は許可されていない (そうですか?) ため、いくつかのトリックを実行する必要があります。シングルトンも私を喜ばせません。PHP または C++ では、関数本体を含む別のファイルを作成し、それを含めるだけです。

これが私がそれをどのように使いたいかです:

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}

public class B extends SomeOtherClass {
    String error = "Error from class B";
    logEvent(error);
}
4

3 に答える 3

36

静的メソッドを任意のクラス (utils クラスなど) に配置し、次のように呼び出します。ClassName.functionName()

静的メソッドはクラスのインスタンスではなくクラスに属しているため、メソッドにアクセスするためにクラスをインスタンス化する必要はありません

しかし、Java ではすべてがクラスに含まれている必要があるため、クラス名がないとアクセスできません。

于 2013-07-29T21:31:31.673 に答える
2

静的メソッドを使用できます。

静的メソッドを使用してクラスを定義します。

public class Util{
    public static void logEvent(String error){
        ...
    }
}

次に、次のように static メソッドを使用できます。

public class A extends SomeClass {
    String error = "Error from class A";
    Util.logEvent(error);
}

静的メソッドの詳細については、こちらをご覧ください。 http://www.leepoint.net/notes-java/flow/methods/50static-methods.html

于 2013-07-29T21:41:34.480 に答える