Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超类(Java)中没有可用的构造函数_Java - Fatal编程技术网

超类(Java)中没有可用的构造函数

超类(Java)中没有可用的构造函数,java,Java,我有一个超级班,叫做游戏。看起来是这样的: import java.util.ArrayList; public class Game { private ArrayList<Enemy> enemies = new ArrayList<Enemy>(); private ArrayList<Tower> towers = new ArrayList<Tower>(); private int corridorLength

我有一个超级班,叫做游戏。看起来是这样的:

import java.util.ArrayList;

public class Game {
    private ArrayList<Enemy> enemies = new ArrayList<Enemy>();
    private ArrayList<Tower> towers = new ArrayList<Tower>();
    private int corridorLength;
    private int currentPosition = 0;
    public Game(int corridorLength){
        this.corridorLength = corridorLength;
    }

    public void addTower(int damage,int timeStep){
        this.towers.add(new Tower(damage,timeStep)); // Add tower with 
current position corrdor length

    }
    public void addEnemy(int health, int speed){
        this.enemies.add(new Enemy(health,speed));
    }
    public void advance(){
        this.currentPosition = this.currentPosition + 1;
        if(this.currentPosition == this.corridorLength){
            System.out.println("Game Over");
        }
    }
    public void printDamage(){
        System.out.println(this.towers.get(this.currentPosition));
    }

}
塔的子类称为弹射器:

public class Catapult extends Tower {
    public Catapult(){
        super(5,3);
    }

}

我是Java新手,看不出我在这里做错了什么。为什么我需要在游戏中为塔使用默认构造函数?

您需要在
游戏
类中显式声明默认构造函数

public Game (){} 

由于,
Object
实例化在此期间链接到
Object
类,因此它将调用其超类构造函数。您已在
游戏中显式声明了arg构造函数,因此默认构造函数不会自动添加。

如果您有
公共游戏(int corridorLength)
参数化的构造函数,则需要显式默认构造函数可能重复:塔楼构造函数隐式调用游戏默认构造函数,这是不存在的。但塔台真的需要延长比赛时间吗?我看不出有什么必要。它不能独立运行吗?我已经添加了一个默认构造函数,但是现在,我在线程“main”java.lang.StackOverflower中得到一个错误异常。上面写的是由于塔中的super.addTower(int,int)行和这个.towers.add。。。在游戏中class@AbylIkhsanov因为你做错了。如果你仔细看你的代码。然后您将看到调用super.addTower时的情况。它将进入无限循环。这就是你得到错误的原因。你是说,当我调用super.addTower时,游戏类中的这个方法再次调用Tower(int,int)构造函数,当他们不断调用对方时,它就会永远存在?@AbylIkhsanov正确。
public Game (){}