2014-10-24 2 views
0

난 자바 초보자 해요, 내 영어가 너무 좋지 않다 ... 그래서 미리 :)에 실례는다른 정적 클래스의 필드와 sublclasses

나는 슈퍼 클래스가 있습니다 Genericresource를 계산 정적 필드 얼마나 많은 인스턴스가 생성되며, 방법이 값 호출 :

public class Genericresource { 
private static int counter; 
public Genericresource() { counter++; } 
public static int howmany() { return counter; } 
//other useful code here 
} 

을 그리고 난 일부 반 동일한 서브 클래스를 만들려면, 특정 자원에 대한 각 :

public class Type1Resource extends Genericresource { 

// here specific code 

} 

이제 t에서 그는 메인 클래스 :

Genericresource a1 = new Genericresource(); 
Genericresource a2 = new Genericresource(); 
Type1Resource b = new Type1Resource(); 
Type1Resource b2 = new Type1Resource(); 
int howa = Genericresource.howmany(); 
int howb = Type1Resource.howmany(); 

와 나는 두 개의 서로 다른 카운터 정적 필드, 슈퍼 클래스 Genericresource 하나, 그리고 서브 클래스 Type1Resource 하나를 사용하고 있음을 기대하고있다. 내 원하는 결과이다 HOWA = 2 howb = 2 내 실제 결과는 다음 4

그래서 내가 인스턴스화 2 개 개의 다른 클래스를 요하는 경우에도 동일한 카운터 정적 필드를 사용하고 HOWA 4 howb, 반면 나는 이 필요합니다. 다른 카운터 정적 필드, 각 서브 클래스에 대해 하나씩 참조하는 것이 필요합니다. 동시에 수퍼 클래스의 정적 메서드 구조입니다. 어떻게하면됩니까?

답변

3

정적 변수 그러므로, 따라서 그 값이 각각의 두 개의 인스턴스 후 4counter 둘 다 Genericresource에서 참조되고 Type1Resource은 (하위 클래스 암시 파라미터 이하 생성자 호출을 통해) Genericresource.counter되면, class 관련된.

static 카운터를 Type1Resource에 선언하고 구체적으로 해당 인스턴스 만 계산하려는 경우 특정 Type1Resource 생성자에서 증가시킵니다.

명확성을 위해 새로운 카운터에도 다른 이름을 사용하는 것이 좋습니다.

+1

이 맞습니다. 여전히 그 디자인을 원한다면 Map

+0

@andresoviedo I agree ... 또는 공장 패턴과 같은 다른 데이터 구조를 사용하도록 리팩터링해야합니다. – Mena

+0

아이디어는 특정 리소스에 대한 글로벌 작업을 통해 Genericresource의 고유 구현을 유지하는 것입니다. 내 프로젝트는 boardgame 프레임 워크 (내 보드 게임 베타를 테스트하기위한)이며, 리소스의 모든 오타에 대해 Genericresource 클래스를 이미지화했습니다. 정적 int field disponibility 및 정적 int 필드 합계 (필요한 경우) 내가 상자에 가지고있는 일반 타일, 그리고 GoldResource 타일의 특정 사용을 계산하기 위해 동일한 정적 필드와 함께 "금"타일에 대한 서브 클래스로. 물론 나는 데이터 구조를 다시 생각할 수 있지만 정적 필드를 사용하면 매우 우아합니다. –

관련 문제