2010-07-29 5 views
0

Java에서 extends (상속)를 사용하려고합니다. 나는 확장 된 빠른 추상 클래스를 만들고 확장했다. 그러나 내 IDE는 이제 "abstract_class가 포함 된 인 클로징 인스턴스가 필요합니다"라는 메시지를 표시하고 파생 클래스의 큰 오류 행에 대해 내 생성자를 제공합니다. 지구상에 무슨 일이 벌어지고 있니? 추상 클래스에는 생성자가 없거나 생성자가 필요하지 않습니다.Java에서 extends를 사용하면 인클루드 인스턴스 오류가 발생합니다.

참조 용으로, 구현에 대한 세부 사항이 동일해야하는 모든 파생 클래스에 대해 유지 관리하고 싶지 않기 때문에 부분적으로 구현보다는 확장을 사용하고 있습니다.

편집 : 일부 답변을 읽었습니다. 하나님의 이름에서 정적 (또는 정적이 아닌) 클래스는 무엇입니까? 그리고 여러분 모두를 짜증나게하기 만해도 문제가 해결되지 않았습니다.

// some_class.java 
public class some_class { 
    public static abstract class abstract_class { 
     ... 
    } 
    ... 
} 

// Model.java 
public class Model extends some_class.abstract_class { 
    public Model(...) { 
     // No enclosing instance! Critical error. 
     ... 
    } 
    ... 
} 

그리고 저는 C++의 헤더 파일이 좋지 않다고 생각했습니다.

+1

몇 가지 코드를 참조 할 수 있습니까? – PaulJWilliams

+0

다른 클래스 안에 클래스가 없습니다! (아직 :) –

답변

2

게시 한 코드가 잘 컴파일 된 것처럼 보입니다. IDE에서 깨끗한 빌드를 시도하면 제대로 작동합니다.

호기심을 위해서 자바는 내부 클래스 인 static과 정규 또는 (non-static)의 두 가지 유형이 있습니다. 내부 클래스 정의에 static 키워드를 포함하지 않으면 해당 클래스의 인스턴스에 항상 부모 클래스의 인스턴스가 필요하다는 의미입니다. 예를 들어 :

public class MyClassOuter { 
    //... 
    public class MyClassInner { 
     //.. 
    } 
} 

당신이 MyClassInner의 인스턴스가 다른 한편으로 MyClassOuter.

Static의 인스턴스에 대한 암시 적 참조가있을 것이라는 점을 이해 것을 쓰는 경우

는, 손으로 그런 일을 의미합니다. 이 클래스는 다른 클래스 정의 내부에있는 클래스 정의입니다. 외부 클래스는 거의 패키지처럼 사용됩니다 (별로는 아니지만).

0

"둘러싼 인스턴스"메시지는 수퍼 클래스에 (정적이 아닌) 내부 클래스가 있음을 거의 의미합니다. 대부분의 경우, 내부 클래스는 정적 일 수 있고 정적이어야합니다. 이것이 가장 좋은 해결 방법 일 것입니다. 또는 메시지가 말한 것처럼 부모가 실제로 정적이 아닌 내부 클래스로 이해되는 경우 "외부"클래스의 인 클로징 인스턴스를 사용해야합니다.

일부 코드를 게시하면 이러한 원인을 모호하게하고 문제를 해결하는 가장 좋은 방법을 제안합니다. 또한 올바른 클래스 이름으로 결의안의 예를 제시 할 수 있습니다. 현재 내/외부 클래스 문제를 확인하지 않은 것처럼 임의의 이름이 도움이 될 것이라고 생각하지 않습니다.

0

super 클래스를 생성 할 수있는 생성자 super()에 자식 클래스에 추가해야합니다.

2

당신이

interface MyInterface 
{ 

    abstract class MyAbstractClass { 
    // ... 
    } 
} 

이 다음 당신은 오류가 설명 얻을 것이다

class ConcreteClass extends MyAbstractClass { 

} 

을 시도하는 경우. 해결 방법은 MyAbstractClass를 최상위 클래스로 이동하는 것입니다 (비공개 클래스에는 반드시 필요한 것은 아니지만 코드를 체계적으로 유지하는 것). 또는 static 수정자를 MyAbstractClass 선언에 추가하십시오.

0

A 급 {

. 
. 
. 


class B{ 
     . . .  
} 

}

당신은 클래스 B에 액세스하려면과는 정적 내부 클래스를 사용하면

같은 코드

AB objOfB = 새로 만들기를 쓸 수없는(). 새로운 B();

관련 문제