无法从没有公共类的文件扩展

时间:2012-09-23 16:49:35

标签: java

Test.java和B.java属于默认包。

File Test.java(因为我们可以为没有公共类的文件指定任何名称)包含:

class A{}    

文件B.java包含:

class B extends A{}

如果我编译B.java,则会出错:

B.java:1: error: cannot find symbol    
class B extends A{   
                ^
symbol: class A
1 error

代码有什么问题?请帮帮我!

5 个答案:

答案 0 :(得分:2)

编译器将在与提及它的文件相同的文件中查找类A(在本例中为B.java)。之后,它将在类路径和import列表中查找它。之后,它将在同一个包中的文件A.java中查找它,此文件不存在。它找不到它...... cannot find symbol

执行@Vikdor推荐的内容:首先编译Test.java

答案 1 :(得分:2)

您应该为要创建的Test.java编译A.class。然后你应该尝试编译B.java,编译器会在当前目录中找到A.class,这是默认的CLASSPATH

C:\Temp\test>dir
 Volume in drive C is OSDisk
 Volume Serial Number is 1E37-6273

 Directory of C:\Temp\test

09/23/2012  10:48 PM    <DIR>          .
09/23/2012  10:48 PM    <DIR>          ..
09/23/2012  10:47 PM               100 B.java
09/23/2012  10:47 PM                68 Test.java
               2 File(s)            168 bytes
               2 Dir(s)  171,760,668,672 bytes free

C:\Temp\test>type Test.java
class A
{
    static {
        System.out.println("A");
    }
}
C:\Temp\test>Type B.java
class B extends A
{
    public static void main(String [] args)
    {
        new B();
    }
}
C:\Temp\test>javac Test.java

C:\Temp\test>dir
 Volume in drive C is OSDisk
 Volume Serial Number is 1E37-6273

 Directory of C:\Temp\test

09/23/2012  10:49 PM    <DIR>          .
09/23/2012  10:49 PM    <DIR>          ..
09/23/2012  10:49 PM               375 A.class
09/23/2012  10:47 PM               100 B.java
09/23/2012  10:47 PM                68 Test.java
               3 File(s)            543 bytes
               2 Dir(s)  171,760,668,672 bytes free

C:\Temp\test>javac B.java

C:\Temp\test>java B
A

C:\Temp\test>

答案 2 :(得分:0)

如果先编译Test.java,则会有一个A.class文件。如果不这样做,编译器就不知道如何找到A类(因为它只知道查找A.class或A.java)。

答案 3 :(得分:0)

   It's Working na..............

  //Test.java

   class A   

  {

  public static void main(String arg[])

    {

        System.out.println("A");

    }

 }

 //B.java

public class B extends A

{

    public static void main(String arg[])

    {

        System.out.println("B");

    }

 }

答案 4 :(得分:0)

创建A类

class A{}

创建B类

class B extends A{}

现在请注意以下几点:

1。 class Aclass B应位于相同的包中,因为class Adefault access modifier ,因此仅授予包级访问权限

<强> 2。编译 class A 首先,然后编译class B