java - 在同一个包中编译两个类

标签 java inheritance package

现在我正在为 OCJP/SCJP 考试做准备。我正在通过

完成我的所有程序

命令行。我刚发现一个问题。

我有两个类(class) Class1 和 Class2。两者都在 pack1 中。

package pack1;

public class Class1
{
        int var1 = 1;
        private int var2 = 2;
        public int var3 = 3;
        protected int var4 = 4;
}

我可以从 pack1 目录编译这个类。

二等

package pack1;
public class Class2 extends Class1
{
        public void accessVars()
        {

                System.out.println(var1);
                System.out.println(var2);
                System.out.println(var3);
                System.out.println(var4);
        }

        public static void main(String args[])
        {
                Class2 c = new Class2();
                c.accessVars();
        }
}

我无法从 pack1 目录编译此类。我收到“找不到 Class1 的符号错误”,但我可以通过导入 pack1.Class1 从外部编译它;

我知道为什么会这样,但我检查了 NetBeans,他们可以在不导入的情况下编译类。如何 ?我应该怎么做才能从 pack1 目录编译它。

谢谢, 克什提吉

最佳答案

您不能在类外访问private 变量。如果您希望它们可以在 Class2

中访问,请将它们更改为 public 或 protected

如下操作

javac pack1/Class1.java
javac pack1/Class2.java

简而言之,

  • 如果您正在编译打包的 java 文件,则从包结构开始的目录进行编译。例如在你的情况下 javac pack1.Class1.java
  • 尝试启动它们时,使用完全限定的类名,例如java pack1.Class2

您可以在 how to compile and launch java programs in package structure 上阅读这个很好的教程

关于java - 在同一个包中编译两个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17990810/

相关文章:

java - 当仅修改实体 obj 的少数字段且其余字段不应为空时,如何更新 Hibernate 实体记录

java - 如何使用反射根据对象类型获取当前类的字段?

java - 如何重写父类的方法但允许可选参数?

c++ - 如何将抽象信号连接到接口(interface)构造函数中的插槽?

Scala:用 val 覆盖 def

python - 我如何使用 python-WikEdDiff?

java - 无法使用 appium-android 创建新 session ,但我给出了正确的包名称

java - 我想知道一个Java写的程序在运行时,它的类会全部加载到主存上吗?

java - 为什么我的 'for' 循环向我的数据库添加空行?

function - 在R中: How can I know if my packages are up to date?