当我们在java中有两个具有相同名称的类时会发生什么?

时间:2015-01-03 11:12:44

标签: java

我在同一目录中有以下文件。

这是我的代码

boys.java

import java.io.*;

public class boys
{
    String name;
    int age;

    boys()
    {
        this.name="empty";
        this.age=0;
    }

    void display()
    {
        System.out.println("Name =" + name + "\nAge ="+ age );
    }

}   

girls.java

import java.io.*;

class girls 
{
    String name;
    int age;

    girls(String name,int age)
    {
        this.name=name;
        this.age=age;
    }

    void display()
    {
        System.out.println("Name="+name+"Age="+age);
    }
 }

group.java`

    import java.io.*;


class boys
{
    int rollno;

    boys()
    {
        rollno=100;
        System.out.printf("%d",rollno);
    }
}

public class group
{
    public static void main(String args[])
    {
        boys b = new boys();

        girls g = new girls("sri divya",21);        

        g.display();
    }
}   

这是我使用javac命令后的问题我只有一个boys.class文件为什么?和

命令'java group'后显示文件group.java中的boys类的结果而不是boys.java文件中的boys类为什么?

如果我想在boys.java中输入男生课,我该怎么办?尽管在group.java中有男生课?

尽管有两个相同的班级名称,为什么没有错误?

有人请帮帮我

2 个答案:

答案 0 :(得分:2)

  

这是我使用javac命令后的问题,我只有一个   boys.class文件为什么?

在给定的包中只能有一个名为boys的类,因此编译器只生成一个。

  

命令' java group'向我展示了男生班的成绩   在文件group.java中,而不是文件中的boys类   boys.java为什么?

当编译器解析你的group.java文件时,他找到了两个类,然后编译它们。

  

如果我想在boys.java中输出boys类,我该怎么办?   尽管男生在group.java上课?

boys删除group.java的定义。

  

尽管有两个相同的班级名称,为什么没有错误?

当您编译group.java时,编译器会在其中找到boys类,因此不需要向外寻找其定义。

在同一个包中的不同位置定义一个类是没有意义的。选择。


现在,如果您真的想将boys类替换为boys.java文件生成的类,您可以:

  • 编译group.java(这将生成group.class和。{ boys.class来自它)
  • 编译boys.java(这将覆盖旧的boys.class 使用boys.java
  • 之一

它会起作用,但我肯定不会使用这样的结构。

答案 1 :(得分:1)

如果您将两个类命名为相同,则它们应位于不同的包中,并且当您要在另一个类中使用它们时,您必须使用其完全限定名称引用(至少)其中一个。< / p>

如果两个类在同一个包中具有相同的名称,ClassLoader只会加载其中一个 - 这肯定不是你想要的。这也会导致Eclipse出错,即:the type Boys is already defined

所以,如果你可以帮助它,你真的不应该以相同的方式命名类(并且绝对不在同一个包中)。

更新:我已经测试了代码,在这种情况下代码运行甚至在抛出编译错误后,Boys类被ClassLoader加载, Group类中定义的一个不是。实际上,Boys中的Groups.java类甚至不在字节码中,它在编译期间被删除。

PS:如果你正在编写Java代码,你应该坚持使用约定(上面的camelcase类名,camelcase方法,埃及括号等),特别是如果你不是唯一一个使用代码的人。