2011-02-14 5 views
3

기본 패키지에 문제가 있습니다. 기본적으로 프로젝트 구조는 시뮬레이션이라는 패키지에서 하나의 추상 클래스를 확장하는 세 가지 주요 클래스로 구성됩니다. 어제 프로젝트에서 이름을 변경했는데 이제 세 가지 기본 클래스가 자동으로 기본 패키지에 넣어 지므로 시뮬레이션 패키지 내부 클래스에서 볼 수 없으며 그 반대의 경우도 마찬가지입니다. 이 SSQSim에서 볼되지 않기 때문에 다음 코드 이기본 패키지의 클래스에 액세스 할 수 없습니다.

import simulation.*; 

class SSQSim extends Simulation{ 

} 

내가이 클래스는 상속 된 추상 메소드 Simulation.stop()를 구현해야한다 " 이러한 오류를 얻을 수 있지만, 그것을 무시할 수 없습니다. 하나는 유형이 추상적하거나 상속 된 메서드를 표시 " "시뮬레이션 유형이 보이지 않습니다 "

감사합니다.

수정 문제는 다른 패키지를 사용할 필요가 없다는 것입니다. 기본적으로 숙제이고 제출 규칙은 매우 엄격합니다. 첫째, 다른 클래스의 도움을 받아 구현할 수있는 몇 가지 메소드로 추상 클래스 "시뮬레이션"을 포함하는 패키지 "시뮬레이션"을 제출해야합니다. 이 부분은 괜찮습니다.

그런 다음 패키지 "시뮬레이션"을 가져 와서 클래스 "시뮬레이션"을 확장하는 세 가지 클래스를 만들어야합니다. 그들은 특별히 어떤 수업에도 이러한 수업을하지 않겠다고 말했습니다. 처음에는 프로젝트가 모두 바뀌었지만 프로젝트가 바뀌 었습니다. 이러한 클래스는 갑자기 기본 패키지로 옮겨졌고 이제는 이러한 오류가 발생합니다.

+3

일반적으로 기본 패키지를 사용하지 마십시오. –

+0

은 기본 패키지에서'SSQSim'입니까? (전체 파일을 제공 한 코드는 무엇입니까?) – aioobe

+0

질문은 무엇입니까? –

답변

1

클래스를 어떻게 작성합니까? 새 클래스를 만들면 Eclipse에 New Java Class 대화 상자가 표시됩니다. 이 대화 상자에 새 클래스를 생성 할 패키지를 선택할 수 있습니다 :

enter image description here

는 그냥 Browse 버튼을 클릭하면 패키지를 선택할 수 있습니다.

enter image description here no i do not like image descriptions >:(

+0

답장을 보내 주셔서 감사합니다. 기본 패키지의 이름을 새 패키지로 바꿀 수는 없습니다. 수업은 패키지에 포함되어서는 안되며, 내 운동을 제출하기위한 필수 조건입니다. 이전에 그렇게했기 때문에 클래스를 패키지에 넣지 않는 방법이 있다는 것을 알고 있습니다. – Sre

+0

@Sre : 클래스를 기본 패키지에 두는 _ 클래스를 패키지에 넣지 않습니다. –

+0

@Sre : 편집 한 것을 보았습니다. _ 추상 클래스 "Simulation"_을 포함하는 "simulation"패키지를 제출해야합니다. 즉, ** 클래스를 '시뮬레이션'패키지에 넣으십시오. ** –

0

Simulation.stop() 메서드의 서명은 simulation 패키지에 대해 패키지로 제한된 (비공개) 일부 클래스를 언급하기 때문입니다. 이 Simulation 같은 클래스에 액세스 할 수 있도록

당신은 simulation 패키지 중 하나

  1. 이동 SSQSim하여 해결하거나
  2. Simulation 클래스 패키지 공개를 확장하는 데 필요한 클래스를 확인합니다.

은 단순히 원하는 패키지에 소스 코드 파일을 드래그 할 수 있습니다, 이클립스 다른 하나 개의 패키지에서 클래스를 이동하고 그에 따라 코드를 리팩토링 것이다 일식합니다.


(A 측면 참고 :. 기본 패키지를 피하기 경우 엄지 손가락의 규칙으로, 기본 패키지를 사용하지 않는 당신은 그러나 우연히 문제도 발생할 수 있습니다!)

1

왜 당신은 자바 사양에서 기본 패키지를 사용

It is a compile time error to import a type from the unnamed package. 

그래서 다른 이름으로 새 패키지를 만들고 클래스를 추가하거나 클래스와 같은 패키지에 넣어해야하고 필요한 수입을한다.

+1

그는 기본 패키지에서 아무것도 가져 오지 않습니다. 그는 '시뮬레이션'패키지에서 가져오고 있습니다. – aioobe

0

이것은 모든 수업의 소스 코드가 게시되지 않았으므로 지금은 힌트 일뿐입니다. 오류 메시지는 부모 클래스에 추상 메서드가 있음을 나타내며 자식 클래스에서의 표시가 손실되어 재정의 할 수 없습니다.일반적으로 이는 기본 액세스 지정자 ("친숙한") 또는 개인 액세스 지정자 (의미가 없으며, 특히 메서드가 추상으로 선언 된 경우)를 사용하기 때문입니다. 부모가 보호 된 액세스 한정자를 사용해야 만 동일한 패키지에 있는지 여부에 관계없이 모든 하위 클래스에서 메소드를 볼 수 있습니다. 간단히 말해, 자식이 재정의되는 메서드를 "볼"수없는 경우 컴파일러는 부모 또는 자식에 정의 된 메서드를 런타임에 사용해야하는지 여부를 추론 할 필연성에 대한 경고를 표시합니다.

기본 패키지에서 클래스를 작성하는 Eclipse의 동작에 관한 한, 적절한 대화 상자 (패키지 필드가있는 새 Java 클래스 대화 상자)에서 새 클래스를 작성할 때 항상 패키지가 지정되도록 할 수 있습니다).

+0

보호 된 수정자를 어디에 둘 필요가 있습니까? – aioobe

+0

@aioobe, 좀 더 구체적으로 대답을 업데이트했습니다. –

관련 문제