2011-04-03 119 views
1

我对类名称有点困惑。这是我的问题...我试图在两个不同的文件中给出相同的类名,并使用默认访问修饰符即使我尝试了接口,但它没有显示任何错误。我想要如何实际访问它们。关于包中的相同类名和接口名称

我不明白这些类是如何使用接口将被用于...文件中的类是否在本地文件中首先检查是否存在类或接口(如果它想使用),然后在包或任何东西else.i我没有得到任何clarity.If任何一个了解我面临什么样的麻烦,我希望能帮助我..... //这是InterfaceTest

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 { 
} 

// This is Tes T堆文件

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{ 

} 

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

+0

您是否收到任何错误? – 2011-04-03 18:39:27

+0

不,我没有得到任何错误克里斯汤普森 – satheesh 2011-04-03 19:58:05

回答

4

这不是很清楚你在说什么,但我会在它采取刺伤 - 如果我不理解你,请留言。

在Java中,一个类通过它的全限定名来标识。完全限定的名称是.classname。

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

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

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

编辑2啊我想我明白了。你是否试图在不同的课堂上使用这些课程?直到它试图解析具有名称冲突的类时,编译器才会投诉。如果这个类没有被引用,那么编译器不会在意。如果你有两个MyClass类,但在任何地方都没有使用,那么编译器不会费心去尝试解决这个类,并且不会注意到这个碰撞。是的,如果您尝试引用MyClass,则认为您指的是您所在的课程。

编辑3最后一个尝试,如果你有MyClass的,然后有嵌套在另一个类,MyClass1的,为MyClass1的完全合格的名称是com.foo.bar.MyClass $ MyClass1的,因为它是作为嵌套的一部分包内的MyClass的

+0

对不起,这不是我的怀疑希望你会从我编辑的问题 – satheesh 2011-04-03 18:01:05

+0

得到澄清,例如,如果有一个包com.foo.bar,并在该包,如果有一个公共类名称MyClass(因为它是公共文件应该是具有相同类名称的名称)。在同一个文件中,我们甚至可以保留一些默认类让它成为MyClass1.Now我怀疑它没有显示任何错误,如果我们有MyClass1作为默认在其他文件....与接口相同....我只是想要这些类的访问方法 – satheesh 2011-04-03 18:05:58

+0

汤姆森感谢你的努力给我这些答案多次...一旦检查出我给的代码...我想你不明白我问的问题(可能是由于沟通不当造成的) – satheesh 2011-04-03 18:29:39

1

接口和类名必须是唯一的:

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"); 
    } 
} 

UPDATE:

你呈现的示例代码是荒谬。抛开错误的命名约定,您可以在两个单独的文件中定义interface t。是什么让你觉得你需要复制并粘贴到第二个文件中,一旦你有第一个文件?从包含InterfaceTest1的定义的文件中删除interface t

所有这些都在相同的package Practice。是什么让你一次又一次地继续定义interface t?你也可以在TestStack的定义中找到它。请考虑一些独特的名称,如果这些定义确实是独一无二的,那么问题就会消失。

+0

是的,你的礼仪......不好的命名规则,但是......我正在准备scjp考试......所以可能会有这样的问题 – satheesh 2011-04-03 19:57:11

相关问题