具有相同名称的类

时间:2015-03-28 09:31:05

标签: java api import package

我创建了一个名为Rectangle的类,并将其放入一个名为' shapes'的包中。然后我创建了另一个名为Test的类,我从中导入了自定义Rectangle类和java.awt.Rectangle类。测试引用了Rectangle类。当我尝试编译时,我得到了消息"对Rectangle的引用含糊不清"。

但是,然后我将自己的Rectangle类放在默认包中(即没有声明包名),并像以前一样导入java.awt.Rectangle类。在编译时,编译器使用默认包中的Rectangle类,而不是我从java.awt包中导入的那个。

任何关于何时存在或不存在冲突的澄清,如果没有,编译器使用哪个类,当两个文件名相同时,将不胜感激。

以下是代码,请求:

测试课

import java.awt.*;

public class Test {
    public static void main(String[] args) {
        Rectangle r = new Rectangle();
        System.out.println(r.width);
    }
}

自定义矩形类

public class Rectangle {

    public int width = 1;

}

1 个答案:

答案 0 :(得分:1)

从java 5开始,您不再需要从默认包中导入类 - 这意味着java总是通过"默认"导入所有默认类。这就是它的名字。

所以,无论你放入一个默认包,它都会被导入你的所有类中。这可能会导致运行时期间的大类和不必要的内存负载。没有特定原因将类放入默认包中是不明智的。

除了默认包之外,java还始终从java.lang包中导入System,String,Integer,Array,Float中的类。你永远不必导入这些课程,不是吗? 默认包中的类行为相同。

现在,对于您的解决方案,如果要访问具有相同名称的类,但不在默认包中,则可以始终使用完整限定名称,如package.Class

my.package.MyClass c = new my.package.MyClass();
c.doSomething();

MyClass defaultClass = new MyClass();
defaultClass.doSomethingWithinAClassFromDefaultPackage();