我希望能够直接使用其他类中的方法。
import package.dialog;
public class Class1 {
public static void main(String[] args) {
dialog.dialog("This is a dialog");
}
}
import javax.swing.JOptionPane
public class dialog {
public static void dialog(String message) {
JOptionPane.showMessageDialog(null, message);
}
}
这段代码按照预期的方式工作,但正如你所看到的,我正在使用 dialog.dialog()。我想知道有没有办法直接使用 dialog()?
答案 0 :(得分:1)
不,这是不可能的。请考虑以下情况:
import package.dialog;
public class Class1 {
public static void main(String[] args) {
// Omit the class and call the dialog method "directly"
dialog("This is a dialog");
}
}
import javax.swing.JOptionPane
public class dialog {
public static void dialog(String message) {
JOptionPane.showMessageDialog(null, message);
}
}
public class SomeOtherClass {
public static void dialog(String message) {
// Perform some action
}
}
编译器如何知道您打算调用哪一个 - dialog
类中的dialog
方法或dialog
中的SomeOtherClass
方法?
编程语言通常经过精心设计,以避免出现这种歧义。
一个臭名昭着的设计(以及你做的建议可能存在的困难)的一个臭名昭着的例子是C ++中的diamond problem和其他具有多重继承的语言,这是一种模糊不清的结果,与你的#&#非常相似39;重新提议。事实上,这是C#和Java禁止多重继承的主要原因之一。重点是这不是你喜欢的语言。
最终,这会使代码更难以阅读,并且可能只是为了节省一点点打字而模糊不清。请记住,为了便于阅读,最好尽可能明确地表达您的意图。
答案 1 :(得分:0)
首先,您的示例无法编译,因为您无法将包命名为“package”。 “package”是一个Java关键字,不允许用作标识符。
所以我们称之为“mypackage”。根据Java约定,您应该使用首字母大写来命名类。因此,我将在下面的示例中使用Dialog
代替dialog
作为类名。
然后,您可以使用静态导入来调用方法dialog()
,而无需前缀。
import static mypackage.Dialog.*;
public class Class1 {
public static void main(String[] args) {
dialog("This is dialog");
}
}