2012-10-18 2 views
0

참조해야 할 수도있는 다른 하위 클래스가있을 수있는 경우 정확한 정보를 제공하기 위해 단일 printf 문이나 @Override toString() 메서드를 사용하는 방법에 관심이 있습니다. 그것.동일한 toString()을 사용하여 다른 하위 클래스 변수에 액세스

여기

가 설정 한 예제 프로그램입니다 : - 문자열 이름 - 개인 INT 깃털 - - INT 나이 클래스 조류 동물을 확장

클래스 동물 동물 animalObj는 // 동물 개체가 클래스 원숭이는 동물을 확장 바르 참조 할 수 - 개인 INT 무게 - INT heightInFeet - - 동물 animalObj // 동물의 객체를 참조 할 수는 클래스 트리 바르 동물 animalInTree가 // 참조 할

클래스 트리가있는 인스턴스 동물 개체 "부울 inTree을()"방법을하는 진정한 의미 경우 동물이 나무에있다 클래스 트리에 2 가지 더 많은 메소드가 있습니다 ... 공공 동물 nowInTree() 공공 동물 hasLeftTree는()

이러한 각 방법뿐만 아니라 동물의 charastics을 목록에에 println 또는의 printf 문을 필요로 ... 여기 캐치이야, 버드 클래스는 PARAM의 지능을 가지고 깃털과 원숭이 클래스 param 더블 무게가 있습니다.

콘솔 트리에 출력되는 트리의 형태는 다음과 같습니다. "912 개의 깃털을 가진 3 년 된 팔콘 트리가 트리를 떠났습니다."

그런 다음 SAME 방법을 사용하거나 심지어 같은 printf 문도 콘솔에 인쇄 할 수 있습니다. "9 살 22.5 파운드 인 Bubba라는 원숭이는 그 무게가 나무를 떠났습니다."

수의 printf 문 (슈퍼와 하위 클래스 방법을 만들어 가정합니다 -이 불완전하지만 =

System.out.printf ("% d 개 년 동물 이름 % s이 (가) 된 $ s이 (가) 나무 남아있다"

ok wtfGoesHere() 메서드가 나타내는 각 하위 클래스에서 var를 가져와야한다는 사실에 유의하십시오 .wwfGoesHere() 메서드가 나타내는 각 하위 클래스에서 var를 가져와야합니다. var weight 나 feathers뿐만 아니라 여분의 정보도 첨부해야합니다 ... 그래서 weight가 아니라 "weight of d"입니다.

무게와 기털은 사적이어야합니다. publis가 그것을 해결할지라도. 그렇다면 여전히 위험한 코딩입니까? 나는 여전히 성격이지만 때로는 사적인 곳에서 일하는 것이 나의 엉덩이를 치고 있습니다.

컴파일러는 현재 Animal 클래스의 정보를 알고 있지만 Monkey 및 Bird의 하위 클래스는 알지 못합니다. 하위 클래스의 정보에 대해 getBlaBla()를 만들 수 있지만 사용할 때 사용할 자바를 알려주는 방법을 알 수 없습니다.

가능한 생각 ...

  1. 메이크업 예외 처리와 printf와 방법에 추가 PARAM에 추가하고 해당 필드를 칠 때 그것이 수있는 하나를 사용하고 다른 한편으로 예외가 발생합니다. .. 심지어 가능하다면 나는 아직 엑스포를 알지 못한다. 나는 진보 된 자바 클래스에있다. 숙제는 예외 처리를 허용하지 않을 것이라고 암시합니다. (비록 이것이 작동한다면 궁금하다.)

  2. 어떤 종류의 하위 클래스가 필요한지를 결정하는 연쇄적인 "if else"를 생성한다.여전히 문제가되는 것은 내가 만들고있는 메소드가 서브 클래스 객체를 전달하는 것을 포함하지 않는다는 것입니다. Tree 클래스 내부를 전달하기위한 객체 클래스 인 Animal 클래스만을 받아들입니다.

  3. 위의 # 2와 비교해 볼 때 Tree 클래스 toString() 메서드를 사용하면 처리 할 수 ​​있습니다.

  4. 우리는 absract 클래스와 "implements"함수에 대해 배웠습니다. 따라서 hasLeftTree() 메서드가 두 가지 하위 클래스 가능성을 모두 처리 할 수있는 한 내 문제를 해결할 수 있다면 공개적으로 열려 있습니다. 특별히 hasLeftTree() 메서드를 명시하지 않으면 동물 확장 정보를 포함하여 모든 하위 클래스에 대한 정보를 제공하는 print 문이 호출됩니다.

나는 이것에 약간의 생각을 넣었으며 손에 들고있는 징징이 아님을 보여주기 위해 위에서 언급했다. 또한, 위의 제한에도 불구하고 선생님은 ... 때때로 우리가 수업에서 언급하지 않은 기능을 찾길 원한다고 선언했습니다. ... 따라서 적절한 업계에서 인정하는 표준에 따라 지침을 따르지 않으면 나는 교수님에게 그렇게 주장 할 것입니다.

필요한 경우 더 많은 코드를 제공합니다. 그 밖의 모든 것은 4 개의 파일 ... 3 개의 클래스와 메인 메소드 파일로 구성된 프로그램에서 작동합니다.

생각하십니까? 및 TYVM 사전 코드 신들.

+0

더 나은 정보를 얻을 수 있도록 코드와 질문의 형식을 올바르게 지정해야합니다. –

답변

0

슈퍼 클래스 java의 toString 메서드를 반환 할 때 다형성을 통해 다음과 같이 toString 메서드의 "더 나은 버전"이 있는지 확인하기 위해 저쪽 클래스를 보게됩니다. 내 개체가 내가 수퍼 클래스 toString을 호출 할 때 서브 클래 싱 객체는 서브 클래스 객체를보고 나서 동일한 메소드가 있는지 확인하기 위해 서브 클래스를 찾습니다.이 경우 "toString"을 찾고 그것을 발견하면 대신 해당 메디도를 사용합니다. 이렇게하면 모든 적절한 정보가 인쇄문 등에 반환됩니다.

관련 문제