-4
class Example(){
    public void disp(float num1, int num2){
        System.out.println("First disp method in Example class");
        System.out.println("num1="+num1);
    }

    public int disp(int num1, int num2){
        System.out.prinln("Second disp method in Example class");
        System.out.println("num2="+num2);
        return num1;
    }
    class Demo(){
        public static void main(String args[]){
        Example obj=new Example();
        obj.disp(60,20);
    }
}

输出:示例类中的第二个 disp 方法 num1=60

这怎么可能?第二种显示方法返回一个整数类型值,调用语法不会将该值存储在任何地方。

第二个问题是,无论我将这个程序保存为Example.javaor Demo.java,它都运行良好。但据我所知,文件名应该与包含 main 函数的类的文件名相同。

4

4 回答 4

2

运行您提供的程序,我得到输出

Second disp method in Example class
num2=20

这是因为带有两个参数的方法签名与int您提供的方法调用完全匹配。
关于返回类型,Java 在决定使用哪种方法时甚至不会考虑返回类型。只有返回类型不同的两种方法是非法的。您可以在语言规范中阅读更多内容。

您不在任何地方存储返回的事实int是无关紧要的,Java 并不要求您这样做。

编辑
关于第二个问题,唯一的规则是每个文件中只能有一个public类,并且该类的名称必须与文件名匹配。
由于您的Example课程不是public,因此该规则不适用。您可以在一个文件中包含任意数量的非公共类。

于 2013-05-25T16:52:03.350 回答
0

文件名应与包含 main 函数的类的文件名相同。这是不正确的。如果您的 A 类是公共的,则文件名将是 A.java。并且在内部类中,如果要创建主方法,则该类应该是静态的

于 2013-05-25T17:45:29.903 回答
0

关于你的第二个问题,由于你没有将任何一个类声明为公共的,你给文件取什么名字都没有关系。在您将其中一个类声明为公共的那一刻,文件名必须与之匹配。试图在同一个文件中声明多个公共类是编译器错误。

为了可维护性,请尽量保持每个文件一个类。

于 2013-05-26T10:41:30.030 回答
0

我认为你需要确保你已经重新编译了你的代码,而不仅仅是保存它。上面的清单肯定会输出:

Second disp method in example class num2=20
于 2013-05-25T16:52:04.417 回答