gpt4 book ai didi

java - 关于包中相同的类名和接口(interface)名

转载 作者:行者123 更新时间:2023-11-29 08:14:51 24 4
gpt4 key购买 nike

我对类名有点困惑。这是我的问题...我试图在两个不同的文件和同一个包中使用默认访问修饰符给出相同的类名,甚至我尝试使用接口(interface),但它不是显示任何错误。我想了解它们的实际访问方式。

我不明白这些类是接口(interface)将如何使用...文件中的类是否首先在本地文件中检查类或接口(interface)(如果它想使用)的存在,然后在包中检查外部或其他任何事情。我不清楚。如果有人了解我所面临的麻烦,我希望能帮助我.....//这是接口(interface)测试

package Practice;

interface t{
public void h();
public void h1();
}

abstract class InterfaceTest implements t{
public void h(){

}
public void h1(){

}
public abstract void t();
}

//这是其他文件InterfaceTest1

package Practice;
interface t{
public void h();
public void h2();
}
public class InterfaceTest1 {
}

//这是TestStack文件

package Practice;

public class TestStack {
Test t=new Test();
public static void main(String[] args){
TestStack t1=new TestStack();
InterfaceTest it=new InterfaceTest();
}
}
interface t{
public void h3();
}
class Test implements t{
public void h3(){

}

public void h1(){

}
public void h2(){

}
}
class InterfaceTest{

}

这三个文件在同一个包中使用,但我没有收到任何名称冲突错误

最佳答案

你说的不是很清楚,但我会试一试 - 如果我不理解你,请发表评论。

在 Java 中,类由其完全限定名标识。完全限定名称是 .classname。

例如,如果一个类位于 com.foo.bar 包中并且名为 MyClass,则完全限定名称将为 com.foo.bar.MyClass。如果您有多个具有相同完全限定名称的类,就会发生冲突,JVM 将不知道使用哪个类。为了在不同的包中使用一个类,您必须导入它。您可以import 上面的类,在您的 java 文件顶部声明 import com.foo.bar.MyClass 或者,如果您想导入整个包,你会使用 import com.foo.bar.* 尽管这被认为是不好的做法。接口(interface)的行为方式相同。不需要导入与给定类位于同一包中的类。因此,希望使用 MyClass 的 com.foo.bar 包中的另一个类不需要导入它。

这对您有帮助吗?如果你能澄清你的问题,我会尽力帮助你。

编辑 为了解决您的澄清问题,每个 java 文件只能有一个顶级公共(public)类。如果您希望在文件中定义额外的公共(public)接口(interface)或类,它们必须嵌套在顶级类中。如果您使用一个类但没有完全限定它,编译器将首先查找具有该名称的嵌套类,然后在同一个包中查找具有该名称的类。如果它仍然找不到它,并且您还没有导入它,那么它将因类解析错误而失败。

编辑2 啊,我想我明白了。您是否试图在不同的类(class)中使用这些类(class)?编译器在尝试解决具有名称冲突的类之前不会提示。如果那个类在任何地方都没有被引用,编译器就不会在意。如果您有两个 MyClass 类,但都没有在任何地方使用,那么编译器将不会尝试解析该类,也不会注意到冲突。是的,在 MyClass 内部,如果您尝试引用 MyClass,它会假设您指的是您所在的类(class)。

编辑 3 最后一次尝试,如果您有 MyClass,然后在其中嵌套了另一个类 MyClass1,则 MyClass1 的完全限定名称是 com.foo.bar.MyClass$MyClass1,因为它是嵌套为 MyClass 的一部分

关于java - 关于包中相同的类名和接口(interface)名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5531345/

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