gpt4 book ai didi

java - 同名类

转载 作者:行者123 更新时间:2023-12-01 11:43:53 26 4
gpt4 key购买 nike

我创建了一个名为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com