2

这是我的第一个代码放在名为 Certification 的目录中

package certification;
    class Parent{
        protected int x=9;//protected access
    }

这是我放置在名为 other 的单独目录中的其他代码

package other;
    import certification.Parent;
    class Child extends Parent{
    public void testIt(){
    System.out.println("x is" + x);
        }
    public static void main(String args[]){
        Child n=new Child();
        n.testIt();
      }
}

但问题是每当我尝试编译 Child 类时,编译器都会给出以下错误 Child.java:2: package certificate does not exist

import certification.Parent;
                ^

Child.java:3:找不到符号符号:class Parent

class Child extends Parent{
                ^

Child.java:5:找不到符号符号:变量 x 位置:class other.Child

System.out.println("x is" + x);
                        ^

请帮我纠正它并正确运行它。真诚的问候。

4

5 回答 5

2

以下是需要改变的;

public class Parent{  //parent class should be public
    protected int x=9;//protected access
}

    Child n=new Child();
    n.testIt(); // not m.voidtestIt();
于 2013-07-16T06:27:08.340 回答
2

说你的文件夹结构是这样的

sources/certification/Parent.java
sources/other/Child.java

另外,像我们试图在包外访问它一样创建你的Parent类。publicChild 类也应该调用n.testIt()而不是调用n.voidTestIt()。void 是返回类型。

课程将是

package certification;
   public class Parent{
        protected int x=9;//protected access
    }


package other;
import certification.Parent;
    class Child extends Parent{
    public void testIt(){
    System.out.println("x is" + x);
        }
    public static void main(String args[]){
        Child n = new Child();
        n.testIt();
      }
}

按着这些次序。

  • 导航到sources目录使用cd sources
  • 首先编译Parent类,因为它是Child使用命令的类所必需的javac certification/Parent.java
  • 然后使用javac -classpath . other/Child.java. 这-classpath是告诉javac命令从哪里选择所需的类的选项,Child.java并且.是当前目录,即我们的类路径,即sources.
  • 编译成功后,Child使用java other.Child. 在这里,我们使用完全限定名称Child

只需导航到您的 C 盘并执行此操作

C:\>cd sources

C:\sources>javac certification/Parent.java

C:\sources>javac -classpath . other/Child.java

C:\sources>java other.Child
x is9

C:\sources>

理想情况下,您应该始终从目录结构的空间编译和启动 java 类。java 文件中的包名是目录结构。在编译时,它们被视为 java 文件,因此在编译时使用目录结构,例如certification/Parent.java . 但是当类被编译时,类文件是使用包名来识别的。因此,请使用根目录中的完全限定名称,即包结构开始的位置。在我们的示例中,sources是目录,certification并且other是包。所以这些类应该被称为certification.Parentand other.Child

于 2013-07-16T06:43:21.560 回答
1

因为,Child该类位于不同的包中;该类Parent需要public变得可见以进行继承。使Parent公众成为

public class Parent {

并修正错字n。无效的 testIt(); 在你的Child#main()方法中。然后假设如下目录结构

/src/other/Child.java
/src/certification/Parent.java

Child.java从内部编译/

/$ javac -cp src -d bin src/other/Child.java

这应该.class

/bin/other/Child.class

编辑
编译后,从/as

/$ java -cp bin other.Child
于 2013-07-16T06:25:54.063 回答
0

您的类路径应设置为认证的父文件夹。通常,您将拥有一个包含您的包结构的“src”文件夹。

1)cd到'src'文件夹。
2)将此位置的类路径设置为SET CLASSPATH=%CLASSPATH%;.;
3)将您的父级编译为javac certification\Parent.java
4)将您的子级编译为javac other\Child.java

这应该有效。

于 2013-07-16T06:27:01.380 回答
0

您需要在根目录下编译 Child.java(在许多情况下应该是 src)并使用路径进行编译,从您的包名称中假设如下:

javac other/Child.java
于 2013-07-16T06:25:27.450 回答