3

Test.java 和 B.java 在默认包中。

文件 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

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

4

5 回答 5

2

编译器将在与提到它的位置相同的文件中查找类A(在本例中B.java)。之后它将在类路径和import列表中查找它。之后它将在A.java同一个包内的文件中查找它,该文件不存在。它无处可寻,所以cannot find symbol......

做@Vikdor 推荐的事情:Test.java先编译。

于 2012-09-23T16:57:02.730 回答
2

您应该编译Test.javaA.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>
于 2012-09-23T17:01:04.833 回答
0

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

于 2012-09-23T17:01:48.047 回答
0

Create class A

class A{}

Create class B

class B extends A{}

Now Do take of these :

1. class A and class B should be in the Same Package, as class A has a default access modifier, so only package level access is granted.

2. Compile class A first, then compile class B.

于 2012-09-23T17:17:19.450 回答
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");

    }

 }
于 2012-09-23T17:08:17.437 回答