"无法访问类型为Hra的封闭实例。"

时间:2014-03-15 16:11:32

标签: java abstract-class

我的代码存在此问题,我不知道如何解决它,请帮助我。 不能访问类型Hra的封闭实例。必须使用Hra类型的封闭实例限定分配(例如x.new A() xHra的实例)。"

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;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您使用的是非静态nested classes,也称为内部类。这些类的实例需要构造其封闭类的实例,如消息所示:

  

必须使用Hra类型的封闭实例限定分配(例如x.new A(),其中x是Hra的实例

查看代码,这些内部类可以是静态嵌套类,因为它们不访问其封闭类的任何成员。或者甚至更好,因为您似乎还不知道嵌套类是什么,并且由于我没有看到这些类嵌套的任何好理由,它们应该是顶级类,在它们自己定义{{1文件。在了解它们的用途以及它们的工作原理之前,不要使用嵌套类。