У меня есть проблема с моим кодом, и я не знаю, как его решить, пожалуйста, помогите мне. Нет доступного экземпляра типа Hra
. Необходимо x.new A()
выделение с помощью экземпляра типа Hra
(например, x.new A()
где x
является экземпляром Hra
). "
public class Hra {
public static void main(String[] args) {
Hrac h = new Cerveny(1); // there is that error
int result = h.zautoc(55, 30);
System.out.print(0);
}
public Hrac[] pole;
private int counter;
public Hra() {
this.pole = new Hrac[100];
this.counter = 0;
}
public void pridajHraca(Hrac h) {
this.pole[counter] = h;
}
public abstract class Hrac{
protected double zivot;
public int tim;
public int zautoc(int velkost, int mojaPozicia){
if (tim == 1){
if (mojaPozicia >= 7)
return (mojaPozicia -7);
else
return (velkost - 7 - mojaPozicia);
}
if (tim == 2){
if (mojaPozicia +3 <= velkost)
return (mojaPozicia +3);
else
return (mojaPozicia -velkost +3 );
}
return 0;
}
}
public class Cerveny extends Hrac{
public Cerveny(double _zivot) {
super.zivot = _zivot;
super.tim = 1;
}
}
public class Cierny extends Hrac{
public Cierny(double _zivot) {
super.zivot = _zivot;
super.tim = 2;
}
}
}
Вы используете нестатические вложенные классы, также известные как внутренние классы. Экземпляры этих классов нуждаются в экземпляре своих закрывающих классов, которые должны быть построены, поскольку сообщение указывает:
Должно быть присвоено выделение с помощью экземпляра типа Hra (например,
x.new A()
гдеx
является экземпляром Hra
Глядя на ваш код, эти внутренние классы могут быть статическими вложенными классами, поскольку они не имеют доступа к любому члену своего закрывающего класса. Или даже лучше, поскольку вы, похоже, не знаете, какие вложенные классы еще есть, и поскольку я не вижу веских оснований для вложенности этих классов, они должны быть классами верхнего уровня, определенными в их собственном .java
файле, Не используйте вложенные классы, прежде чем понимать, для чего они нужны, и как они работают.