«Ни один экземпляр типа Hra не доступен».

1

У меня есть проблема с моим кодом, и я не знаю, как его решить, пожалуйста, помогите мне. Нет доступного экземпляра типа 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;
        }
    }
}
Теги:
abstract-class

1 ответ

2

Вы используете нестатические вложенные классы, также известные как внутренние классы. Экземпляры этих классов нуждаются в экземпляре своих закрывающих классов, которые должны быть построены, поскольку сообщение указывает:

Должно быть присвоено выделение с помощью экземпляра типа Hra (например, x.new A() где x является экземпляром Hra

Глядя на ваш код, эти внутренние классы могут быть статическими вложенными классами, поскольку они не имеют доступа к любому члену своего закрывающего класса. Или даже лучше, поскольку вы, похоже, не знаете, какие вложенные классы еще есть, и поскольку я не вижу веских оснований для вложенности этих классов, они должны быть классами верхнего уровня, определенными в их собственном .java файле, Не используйте вложенные классы, прежде чем понимать, для чего они нужны, и как они работают.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню