【问题标题】:Java Inheritance within the same package not finding class同一个包中的Java继承找不到类
【发布时间】:2020-09-05 00:34:52
【问题描述】:

我在同一个文件夹和包中有两个类。它们的位置是 code/src/enemy。这是两个类:

package src.enemy;

public class Enemy{
  String name = "";
  float maxHealth = 100;
  float health;
  public Enemy(String name) // This made me laugh more than it should
  {
    this.name = name;
    this.health = this.maxHealth;
  }
}

package src.enemy;

public class baseEnemy extends Enemy{
public baseEnemy(String name)
{
   super(name);
}

}

由于某种原因,当我尝试编译它们时,我得到:

:3: error: cannot find symbol
public class baseEnemy extends Enemy{
 symbol: class Enemy

我正在使用 Javac 进行编译。我不太确定为什么 baseEnemy 在同一个文件夹和包中时不能继承敌人。

【问题讨论】:

  • 你能写出如何使用 javac 编译它们吗?来自哪个文件夹的确切行。
  • javac ~/Documents/Assignments/Ass4/Code/src/enemy/Enemy.java。这编译得很好。然后 javac ~/Documents/Assignments/Ass4/Code/src/enemy/baseEnemy.java 抛出错误。
  • 我没有直接用过javac,但是我觉得你必须把两个文件都给javac。例如 javac path/to/A path/to/C
  • 当我这样做时,我得到一个不同的错误。我已经将 baseEnemy 类更改为具有参数名称并调用 super(name) 的构造函数。我现在得到的错误是:类 Enemy 中的构造函数 Enemy 不能应用于给定类型;公共类 baseEnemy 扩展 Enemy{ ^ 必需:找到字符串:没有参数原因:实际参数列表和正式参数列表的长度不同
  • 使用您当前的代码,并在命令行中指定这两个文件,我能够毫无错误地进行编译。

标签: java inheritance package


【解决方案1】:
javac ~/Documents/Assignments/Ass4/Code/src/enemy/Enemy.java. 

没有。你应该在~/Documents/Assignments/Ass4/Code,然后发出

javac src/enemy/Enemy.java

对于其他类也是如此。

【讨论】:

    【解决方案2】:

    这是因为你的 baseEnemy 类中没有构造函数。如果您将其更改为:

    公共类敌人{

    String name = "";
    float maxHealth = 100;
    float health;
    public Enemy(String name) // This made me laugh more than it should
    {
        this.name = name;
        this.health = this.maxHealth;
    }
    
    public Enemy() {
    }
    }
    

    然后

    public class baseEnemy extends Enemy {
    
    public baseEnemy(String name) {
        super(name);
    }
    }
    

    它将能够提供名称。理想情况下,0 级类应该总是有一个 0 参数构造函数:)。希望对您有所帮助。

    【讨论】:

    • 您是对的,但我认为编译器会针对此错误给出另一条消息。
    • 我已经使用上面的编辑脚本编译并构建了它,你尝试过干净和构建吗?
    • 我没有使用 IDE。我可能会尝试删除所有内容,然后重试
    【解决方案3】:

    (代表问题作者发布).

    所以最初我创建了目录,“代码”有一个大写字母 c。然后我看到了这个并用一个小c创建了一个新文件夹。我没有意识到我的原子代码引用了文件夹中大写 C 的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多