java - 包中的基类和派生类

标签 java inheritance

当我在同一目录中创建基类和派生类而不指定任何包时,它们编译得很好,但是将它们添加到包中会导致派生类出错,指出它无法找到基类的符号。这个错误令人沮丧,因为我以前一直在使用 c 语言工作,为什么在 Java 中出现所有这些恶作剧?

package Testpackage; // If I comment this then derived class compiles fine

public class Test_class{

    int x,y;


    public static Integer angle;


    public Test_class(int a,int b)
{
    x = a;
        y = b;
}


    public Integer product()
{
    return x*y;
}
}

*************Derived class ****************
package Testpackage;  // If I comment this then it compiles fine

public class Derived_class extends Test_class{

       Integer vol;
      Test_class I = new Test_class(1,2); 
        public Derived_class(){
          super(9,10);
      vol = 0;
   }

       public Integer volume()
   {
         vol = this.product();

         return vol;
   }

}


********* output *************
assa@dasman-laptop:~/Testpackage$ javac Derived_class.java 
Derived_class.java:4: cannot find symbol
symbol: class Test_class
public class Derived_class extends Test_class{
                                   ^
Derived_class.java:7: cannot find symbol
symbol  : class Test_class
location: class Testpackage.Derived_class
          Test_class I = new Test_class(1,2); 
          ^
Derived_class.java:7: cannot find symbol
symbol  : class Test_class
location: class Testpackage.Derived_class
          Test_class I = new Test_class(1,2); 
                             ^
Derived_class.java:15: cannot find symbol
symbol  : method product()
location: class Testpackage.Derived_class
             vol = this.product();

最佳答案

使用包时,您应该从包层次结构的根目录调用编译器(在您的情况下为 ~)。

所以,向上一个目录,然后这样调用 javac:

javac TestPackage/Derived_class.java

然后编译应该可以工作了。为了执行,您将使用:

 java TestPackage.Derived_class

(但是你的类还没有任何主要方法。)


编辑:为什么这是必要的?当 javac 搜索从您的类中引用的类时,它会根据它们的包进行搜索。您的 Derived_class 引用了类 TestPackage.TestClass,这将在 TestPackage/TestClass.java(或 .class)(相对于类路径,此处由您的工作目录组成)。当您已经在 TestPackage 目录中时,不存在这样的目录。

另一种在这里调用它的方法是使用

javac -cp .. Derived_class.java

从那时起,javac 就会从父目录中搜索相关的类。然后您还应该设置“-d”参数以将生成的类文件放入正确的结构中。调用 javac -help 以获得选项的摘要,或查看您的 JDK 文档以获得所有选项的更详细描述。

当你只编译一个文件时,这并不重要,因为要编译的文件是在命令行上给出的,javac 不需要搜索更多的文件。

关于java - 包中的基类和派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911406/

相关文章:

java - 如何更改 Sublime 中 Java 的路径?

java - Spring 3.1.0 mvc 绑定(bind) modelattribute 以及 requestbody

java - Spock Mock 与 Guava Collection

c++ - 从没有默认构造函数的纯抽象类继承

java - 下载sqlite数据库时遇到问题

java - 未找到 packageName gradle build AndroidManifest

javascript - 使用 Object.create() 的 Angular 服务继承

c++ - 为什么 C++ 模板实例化失败?

c++ - 从未定义它的基类调用纯虚函数?

python - Python中的动态继承