2016-10-07 2 views
0

나는 슈퍼 클래스와 서브 클래스에 대해 배우고있다. 수퍼 클래스 (Campsite)를 만들고 두 개의 하위 클래스 (FrontCountry 및 BackCountry) 중 하나에는 두 개의 추가 하위 클래스 (Serviced 및 Unserviced)가 있어야합니다. 지금까지 나쁘지 않았지만, 나는 그 모든 것을 할 수 있습니다. 하지만이 질문은 맨 끝에 있습니다.main 메서드에서 하위 클래스의 메서드에 액세스하는 방법? (Java)

* CampTester에서 다음, 그 파라미터로 캠프장 오브젝트의 배열을 취하고 결정하고 출력 통계라는 다른 정적 자바 메소드 물품 각각의 속성 값은
전면 국가 사이트의 총수를 객체 을 뉴 펀들 랜드 및 래브라도
Newman Sound, Terra Nova National Park, Newfoundland 및 Labrador의 서비스 사이트 (30 amp 서비스 포함)의 전체 수
Gros Morne National Park의 모든 Back Country 사이트 위치, 뉴 펀들 랜드 및 래브라도
Malady Head, Terra Nova N에있는 모든 unserviced 사이트의 목록으로 사이트 번호로 athe park, Newfoundland and Labrador

나는 향상된 루프를 사용하여 내가 만든 배열의 각 개체에 대한 특성을 인쇄하려고합니다. 충분히 간단합니다. .

인가 : 문제는 내가 집계와 현재에 필요한 서브 클래스에서 정보를 검색 할 수있는 방법에 액세스 할 수 있다는 사실 내에있는 본질적으로

(getLocation에, getAmpService 같은 방법, 지방을 얻을) 하위 클래스의 외부 (하위 계층)에서 정의 된 메서드에 액세스 할 수 있습니까?

+2

수업을 보여줄 수 있습니까? main에서 정적이 아닌 메서드를 호출하려고하고 있는데, main이 정적이므로 작동하지 않는다고 생각합니다. – Zarwan

+1

안녕하세요. 안녕하세요. 몇 가지 제안 - 도움말 섹션, 특히 [mcve]를 읽으십시오.슬프게도, 아무도 당신의 긴 과제를 읽지 않을 것이므로 가능한 가장 작은 예제로 문제를 밝혀 봅니다. – OldProgrammer

+0

할당은 통계 방법이 정적이어야한다고 말합니다. 정적이 아닌 경우 main에서 호출 할 수 없습니다. public static void statistics (Campsite [] camps) {...} – jmw5598

답변

0

잘 모르겠습니다. 하위 클래스의 메서드에 액세스 할 때 캐스팅을 수행하지 않은 것으로 보입니다.

getLocation, getAmpService 메소드는 FrontCountry에만 있지만 Campsite 슈퍼 클래스에는 존재하지 않는다고 가정하십시오. 이러한 메서드에 액세스하기 전에 개체를 FrontCountry로 캐스팅해야합니다.

if (campsite instanceof FrontCountry) { 
    FrontCountry frontCountry = (FrontCountry)campsite; 
    frontCountry.getLocation(); 
    frontCountry.getAmpService(); 
} 
+0

대단히 감사합니다! 이것은 그 것이었다! –

1

클래스 변수 위치는 Campsite 클래스 내에 정의되어야하며 보호되어야합니다. 보호 된 클래스 변수는 상속됩니다. 캠프 사이트 클래스에는 public getLocation() 및 setLocation() 메서드도 있어야합니다. 하위 클래스는 위치, getLocation() 및 setLocation()을 상속합니다. Campsite의 모든 인스턴스 (하위 클래스 인스턴스 포함)에는 camp.getLocation() 메소드가 있습니다.

+0

위치는 CampCentry가 아니라 BackCountry의 속성입니다. –

+0

if (camp instanceof BackCountry) {((BackCountry) cammp) .getLocation()} – JLaudio

0

이것은 지금까지 가지고있는 코드로 대답하는 것이 더 쉬울 것이지만 기본적으로 FrontCountry 클래스가 Campsite 클래스를 확장하고 캠프 사이트 배열을 가지고 있다면 FrontCountry 메서드에 액세스하기 위해 다음과 같이 할 수 있습니다 :

if (campSiteArray[0] instanceof FrontCountry){ 
    ((FrontCountry)campSiteArray[0]).frontCountryMethod(); 
0

JLaudio의 답변이 맞습니다. 또한 하위 클래스 메서드에 액세스 할 수 없다는 내용을 추가하고 싶습니다 (단축 된 질문이 제시 할 수 있음). 그 이유는 클래스 구조가 하위 클래스가 부모보다 더 인 이되도록 허용하기 때문입니다. 따라서 하위 클래스 (FrontCountry 또는 BackCountry)에 특별히 정의 된 메서드는 Campsite 개체를 호출 할 수 없습니다.

+0

예, JLaudio의 답변에 동의합니다. –

관련 문제