直接从另一个类访问方法

时间:2017-11-15 15:07:21

标签: java class methods

我希望能够直接使用其他类中的方法。

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()

2 个答案:

答案 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");
  }
}