14

我最近(4 天前)开始用 JAVA 编程。我有一些 C++ 和 PHP 的整体编程经验。我的问题是:我们可以在 JAVA 中实现一个在所有类中都可用的函数吗?我正在考虑一些全局日志记录功能,我需要在几个地方调用(记录事件、错误等)。

想象一下我有两个类,A 和 B。我需要在这两个类中调用日志记录函数,但我不想复制整个函数体(我相信这很糟糕),我想称之为严格(不创建另一个类,实例化它,然后从实例调用),如logEvent(someVariable). 所以我应该使用一个抽象类 C,A 和 B 将扩展它,但它们已经是其他类的扩展(内置)。由于不允许多重继承(是吗?),我需要做一些技巧。辛格尔顿也不喜欢我。在 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 回答
14

您应该使用静态方法:

package xxx;

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

并导入静态:

import static xxx.Util.*;

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}
于 2013-11-04T14:11:26.257 回答
2

您可以使用静态方法。

用静态方法定义一个类:

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

然后,您可以像这样使用静态方法:

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 回答