2014-03-19 9 views
0

동물 목록 (소, 돼지 및 병아리)이 포함 된 Java라는 Farm이라는 클래스에 클래스를 만들었습니다. myFarm은 NamedCow, pig 및 chick 클래스의 객체를 포함하는 Farm 클래스의 객체 배열입니다.Java 프로그램에 대한 제안

내 샘플 코드는 여기에 표시됩니다 :

import java.util.*; 

class Farm 

{ 

    private ArrayList<Animal> myFarm; 

    Farm() 

    { 

     myFarm=new ArrayList<Animal>(); 

     myFarm.add(new NamedCow("cow","Elsie","moo")); 

     myFarm.add(new Chick("chick","cheep","cluck")); 

     myFarm.add(new Pig("pig","oink")); 

    } 

    public void animalSounds(){ 

      Animal temp; 

      for(int i = 0; i < myFarm.size(); i++){ 

      temp = myFarm.get(i); 

      System.out.println(temp.getType() + " goes " + temp.getSound()); 

      } 

      NamedCow named = (NamedCow)myFarm.get(0); 

      System.out.println(named.getName()); 

     } 

    } 

내 코드에서 한 줄을 이해하지 않은 : NamedCow = (NamedCow)라는 이름의 myFarm.get (0); 여기 오른쪽의 괄호 안에 들어있는 NamedCow의 의미는 무엇입니까? Cn 아무도 말해줘?

+3

당신이 이해하지 못하는 코드를 기다리십시오. 비린내가 난다. 'NamedCow named = (NamedCow) myFarm.get (0);'은 List myFarm에서 첫 번째 Object를 가져 와서 NamedCow로 변환합니다. –

+0

코드를 완전히 붙여 넣으십시오 – Shriram

+0

NamedCow는 선언 된 클래스입니다. – raj

답변

0

그냥 유형 캐스팅. myFarm.get(0);이라고 쓰면 기본적으로 AnimalArraylist의 첫 번째 색인이 생성됩니다. 그리고 값을 NamedCow 유형의 오브젝트에 지정합니다. 따라서 명시 적으로 값을 NamedCow으로 전송해야합니다.

전체 코드에서 NamedCowAnimal의 수퍼 클래스 일 수 있습니다. 따라서 수퍼 클래스 (NamedCow) 변수는 Java의 상속 규칙 인 하위 클래스 (Animal) 객체를 보유 할 수 있습니다. 운영자의

4

myFarmArrayList<Animal>입니다. 라인에서

NamedCow named = (NamedCow)myFarm.get(0); 

당신은 ArrayList의 첫 번째 인덱스에있는 개체가 가정을 기반으로, 유형NamedCow의 것을 가정하고, 당신은 Animal에서 객체를 캐스팅하고 NamedCow.

캐스트 즉, 하지 사건의 경우 런타임 예외가 발생되므로주의, namedNamedCow를 할당하는 런타임 검사를 삽입합니다.

실제로 프로그래밍의 기본이기 때문에 더 잘 이해하려면 Inheritance에 대한 자습서를 읽어 보는 것이 좋습니다.

0

사용 인스턴스는 점점 개체가 당신이 MyFarm에있는 첫 번째 개체가 무엇인지

사용 디버거 & 확인을해야 무엇이든을 기준으로 소 또는 돼지 또는 여자 이름이 있는지 여부를 확인하기 동물의 ArrayList

관련 문제