Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包中的类名和接口名大致相同_Java - Fatal编程技术网

Java 包中的类名和接口名大致相同

Java 包中的类名和接口名大致相同,java,Java,我对类名有点困惑。这是我的问题…我尝试在两个不同的文件和同一个包中使用默认访问修饰符提供相同的类名,甚至我尝试使用接口,但它没有显示任何错误。我想知道如何实际访问它们 我不明白这些类是如何使用接口的…文件中的类是否先在本地文件中检查类或接口(如果它想使用)的存在,然后再在包或其他任何东西中检查。我没有得到任何澄清。如果有人了解我面临的麻烦,我希望能帮助我。。。。。 //这是接口测试 package Practice; interface t{ public void h(); public v

我对类名有点困惑。这是我的问题…我尝试在两个不同的文件和同一个包中使用默认访问修饰符提供相同的类名,甚至我尝试使用接口,但它没有显示任何错误。我想知道如何实际访问它们

我不明白这些类是如何使用接口的…文件中的类是否先在本地文件中检查类或接口(如果它想使用)的存在,然后再在包或其他任何东西中检查。我没有得到任何澄清。如果有人了解我面临的麻烦,我希望能帮助我。。。。。 //这是接口测试

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();
}
//这是另一个文件接口测试1

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文件的顶部添加一条语句lie
import com.foo.bar.MyClass
,或者,如果您想导入整个包,您可以使用
import com.foo.bar.
,尽管这被认为是不好的做法。接口的行为方式相同。与给定类位于同一包中的类不需要导入。因此,com.foo.bar包中希望使用MyClass的另一个类不需要导入它

这对你有帮助吗?如果你能澄清你的问题,我可以试着帮你更多

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

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


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

你说的不太清楚,但我会尝试一下-如果我不理解你的意思,请留下评论

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

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

这对你有帮助吗?如果你能澄清你的问题,我可以试着帮你更多

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

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

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

I
package foo;

public interface Bar
{
    void print();
}

class Bat implements Bar
{
    public void print() { System.out.println("Hi there"); }
}
package other;

public class Bat
{
    public void doSomething() 
    { 
        System.out.println("And now for something completely different");
    }
}