2012-10-18 2 views
2

단순히 내가하려는 것은 LinkedList에서 클래스를 확장하는 것입니다. 여기 내 코드입니다 :Java에서 확장 클래스의 인스턴스를 인스턴스화 할 수없는 이유는 무엇입니까?

Test.java:7: non-static variable this cannot be referenced from a static context 
     OrderedLinkedList ol = new OrderedLinkedList(); 
          ^
1 error 

내가 인스턴스화 아무것도하지만를 참조하고 있지 않다 믿는다 그러나

import java.util.*; 

    class Test { 

    public static void main(String [] args) { 

     OrderedLinkedList ol = new OrderedLinkedList(); 
    } 

    public class OrderedLinkedList extends LinkedList<Integer> { 

     public boolean add(Integer item) { 
      for (int i=0; i < size(); i++) { 
       Integer itemOfList = get(i); 
       if (itemOfList.compareTo(item) > 0) { 
        add(i, item); 
        break; 
       } 
      } 
      return true; 
     } 
    } 

} 

,이 메시지와 함께 오류를 컴파일 얻었다. 당신이 동일한 파일에 두 클래스가있는 경우

답변

5

내부 클래스는 외부 클래스에 암시 적 참조가로 수업을합니다. 그래서 컴파일러가 주요 정적 방법으로 내부 클래스에 대한 테스트의 인스턴스가 아니라고 불평

public static class OrderedLinkedList extends LinkedList<Integer> { 

:

당신은이 문제를 피하기 위해 정적 내부 클래스를 표시해야합니다.

1

1) 닫기 테스트 클래스 2), 주요 클래스는 파일 이름 만 메인 클래스가 공개해야해야한다. 내부 클래스가 귀하의 요구 사항 인 경우 정적 표시하지 않는 한

public class Test { 

    public static void main(String [] args) { 

     OrderedLinkedList ol = new OrderedLinkedList(); 
    } 
} 

그런 다음

class OrderedLinkedList extends LinkedList<Integer> { 

      public boolean add(Integer item) { 
       for (int i=0; i < size(); i++) { 
        Integer itemOfList = get(i); 
        if (itemOfList.compareTo(item) > 0) { 
         add(i, item); 
         break; 
        } 
       } 
       return true; 
      } 
     } 

후, 정적 클래스

+0

원래 질문의 'OrderedLinkList'는 내부 클래스입니다. 내부 클래스로서 올바르게 배치됩니다. –

+0

@JanDvorak : 그렇다면 내부 클래스를 정적으로 만듭니다. 질문에서 그것은 명확하지 않다. – kosa

0

클래스 OrderedLinkedList은 정적 인 컨텍스트가 아닙니다. public class OrderedLinkedList extends LinkedList<Integer>public static class OrderedLinkedList extends LinkedList<Integer>으로 변경하고 컴파일해야합니다. 정적 변수와 인스턴스 변수를 읽으면 더 많은 것을 이해할 수 있습니다.

1

두 클래스를 별도의 파일로 유지하십시오. 그러나 내부 클래스는 다음 목표 인 경우

접근이 정적으로 팔자를 선언하는

new Test().new OrderedLinkedList(); 
+0

이 구문은 알 수 없습니다. 참고? –

0

시도를 다음과 같이

static OrderedLinkedList ol = new OrderedLinkedList(); 
0

왜 당신이 다른 클래스 Test 안에 public 클래스 OrderedLinkedList을 구현을 ?

내부 클래스를 자체 파일로 이동하십시오. 그것은 작동해야합니다.

관련 문제