In meinem Code habe ich eine Super-Klasse namens Game
und ihre Unterklasse Tower
. Tower
hat auch seine Unterklasse Catapult
. Die Catapult Unterklasse sieht wie folgt aus:Ich kann das Objekt nicht in meiner Array-Liste erhalten
public class Catapult extends Tower {
public Catapult(){
super(5,3);
}
}
Es ruft Tower
Konstruktor mit konstanten ganzzahligen Werte 5 und 3. Dann seine Super Tower
wie folgt aussieht:
public class Tower extends Game {
private int damage;
private int timeStep;
private int position;
private boolean willFire;
public Tower(int damage, int timeStep){
super.addTower(damage,timeStep);
}
public Tower(int damage, int timeStep, int position,boolean willFire){
this.damage = damage;
this.timeStep = timeStep;
this.position = position;
this.willFire = willFire;
}
public void getDamage(){
super.printDamage();
}
}
So, jetzt die Werte für die mit Schaden und Zeitschritt (5 und 3), Tower
ruft seine super-Konstruktor (Spiel):
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(){}
public Game(int corridorLength){
this.corridorLength = corridorLength;
}
public void addTower(int damage,int timeStep){
this.towers.add(new Tower(damage,timeStep,this.currentPosition,true));
// Add tower with current position corrdor length
System.out.println("Tower added in addTower!");}
public void printDamage(){
System.out.println(this.towers.get(this.currentPosition)); // How to get the damage item?
}
}
So das Objekt Tower
mit seinen Werten wird im Array Tower gespeichert (zumindest gehe ich davon aus). Also, mit einem nicht leeren Array namens Türme mit mindestens Größe 1, habe ich hier einige Probleme. Erstens: Wenn ich Tower.getDamage()
Methode aufrufen, ruft es schließlich die Methode in der Game
Klasse, die nur das Objekt Tower
bei Index 0 druckt. Aber wenn ich es anders herum, wie Drucken des Objekts innerhalb der Game
Klasse versuchen möchte direkt aus der Game
Klasse aufrufen, anstatt durch seine Tower
Unterklasse des Aufrufs):
public void getDamage(){
System.out.println(this.towers.get(this.currentPosition));
}
Es hat eine außerhalb des zulässigen Bereichs Array Ausnahme auslöst, die ich nicht bekommen, da die Array-Türme ein Objekt im Index gespeichert haben sollte 0.
Zweitens: Wie kann ich die tatsächliche Ganzzahl innerhalb des Objekts erhalten t (Turm) bei Index 0? Also, ich kann so nicht tun:
this.towers.get(0).damage
Auf einen kurzen Blick auf Ihren Code, sehe ich, dass Sie scheinen Vererbung in großem Umfang missbrauchen. Warum sollte Tower Game verlängern? Macht keinen Sinn, denn wie kann Tower ein spezieller Untertyp des Spiels sein? –
Tower ist ein Objekt im Spiel. Wenn ich Objekt sage, meine ich wie einfaches Objekt (Auto und Motorrad sind beide Objekte des Fahrzeugs). –
Auch Tower wird nicht zum Tower-Feld auf Bau hinzugefügt. Tatsächlich erstellt jeder 'neue Turm()' ein neues 'Spiel' mit einer leeren Turmliste. –