java - 同名类

标签 java api import package

我创建了一个名为 Rectangle 的类,并将其放入一个名为“shapes”的包中。然后,我创建了另一个名为 Test 的类,从中导入了自定义 Rectangle 类和 java.awt.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;

}

最佳答案

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

关于java - 同名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29315557/

相关文章:

api - 如何使用 if 语句在 "flutter/dart"中发送 https post 请求

json - 如何修复“不获取数据”错误?在 swift 和 Laravel api 中

Python:这两个 import 语句有什么区别?

python - 导入igraph时如何解决AttributeError?

java - 如何为简单的配置类编写测试?

Java 从 Linux 上的 Arduino Nano 读取 SerialPort 上的流

java - 在列表中添加 JavaVO 类时出现空指针异常

java - 如何从 jsp 请求对象中获取基本 url?

python - 可以使用 REST 服务的开源搜索 UI 项目

tensorflow - 导入 Tensorflow 库报错