자바에서 이게 왜 에러가 나는거죠?


테트리스 게임을 만들고있는데요. 아래 코드를 실행하면 Shape is not an enclosing class라는 메세지가 나와요.

public class Test {
    public static void main(String[] args) {
        Shape s = new Shape.ZShape();
    }
}
public class Shape {

    private String shape;
    private int[][] coords;
    private int[][] noShapeCoords = { { 0, 0 },   { 0, 0 },   { 0, 0 },   { 0, 0 } };
    private int[][] zShapeCoords = { { 0, -1 },  { 0, 0 },   { -1, 0 },  { -1, 1 } };
    private int[][] sShapeCoords = { { 0, -1 },  { 0, 0 },   { 1, 0 },   { 1, 1 } };
    private int[][] lineShapeCoords = { { 0, -1 },  { 0, 0 },   { 0, 1 },   { 0, 2 } };
    private int[][] tShapeCoords = { { -1, 0 },  { 0, 0 },   { 1, 0 },   { 0, 1 } };
    private int[][] squareShapeCoords = { { 0, 0 },   { 1, 0 },   { 0, 1 },   { 1, 1 }   };
    private int[][] lShapeCoords = { { -1, -1 }, { 0, -1 },  { 0, 0 },   { 0, 1 } };
    private int[][] mirroredLShapeCoords = { { 1, -1 },  { 0, -1 },  { 0, 0 },   { 0, 1 } };

    public Shape(){
        int[][] coords =  noShapeCoords;
        shape = "NoShape";
    }

    class ZShape{
        int[][] coords =  zShapeCoords;
        String shape = "ZShape";
    }

    class SShape{
        int[][] coords = sShapeCoords;
        String shape = "SShape";
    }

 //etc
}

뭐가 잘못된거죠?

  • 2016년 02월 23일에 작성됨

조회수 719


1 답변


좋아요
0
싫어요
채택취소하기

ZShape는 static클래스가 아닙니다. 그래서 외부 클래스의 인스턴스가 필요합니다. 간단한 해결책은 ZShape를 static으로 정의하든지 아니면 Shape와 ZShape의 인스턴스를 만들어서 사용하는방법이 있습니다.

  • 2016년 02월 23일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close