Прежде всего, Tile
имеет только один конструктор с параметрами x, y, z, без конструктора по умолчанию, поэтому вам нужно вызвать super (x, y, z) в конструкторе TestTile
. Как сказал slandau , «конструктор» имеет неправильный void
тип возврата.
TestTile
необходимо объявить параметры или передать значения по умолчанию:
public TestTile(int x, int y, int z) {
super(x, y, z);
}
public TestTile() {
super(0, 0, 0);
}
В Java существует много рисков для вызова абстрактного метода в конструкторе, см. Также здесь , экземпляр не инициализирован должным образом. Вы можете только вызывать безопасные статические методы (которые здесь не будут работать).
public TestTile(int x, int y, int z) {
super(x, y, z);
color = Color.RED;
friction = 0.1f;
bounce = 0.2f;
liquid = false;
}
или вам нужно вызвать закрытый метод в производном классе (уберите реферат init()
из Tile
):
public TestTile(int x, int y, int z) {
super(x, y, z);
init();
}
private void init() {
color = Color.RED;
friction = 0.1f;
bounce = 0.2f;
liquid = false;
}
Вы уверены, что участники - правильная реализация здесь? Может быть, абстрактные методы (геттеры) могут быть здесь лучше объявить поведение и реализовать его в подклассе?
public abstract class Tile {
public int x;
public int y;
public int z;
public Tile(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public abstract Color getColor();
public abstract float getFriction();
public abstract float getBounce();
public abstract boolean isLiquid();
}
public class TestTile extends Tile {
public TestTile(int x, int y, int z) {
super(x, y, z);
}
public Color getColor() {
return Color.RED;
}
public float getFriction() {
return 0.1f;
}
public float getBounce() {
return 0.2f;
}
public boolean isLiquid() {
return false;
}
}