2012-11-28 1 views
0
class Animal { 

} 

class Horse extends Animal { 

} 

public class Test { 
    public static void main(){ 
     Animal a = new Horse();//mark1 
    } 
} 


Animal ah = new Horse();// reference type is Animal and object is Horse 
내가 완전히 아래이 이해할 수없는

: 동물 아 = 새로운 말을(); // 참조 형 동물과 목적은
말입니다 난 항상 당신이 할 수 따라서 그것을이유는 참조 형식은 자바 객체 유형과 다를 수 있습니다

+5

http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html – jrajav

+0

말은 "동물"이기 때문입니다. 방법은 "나는 내 일을하기 위해 동물이 필요하다"고 말했고 당신은 말을주었습니다. 말은 "동물"이기 때문에 당신은 옳은 일을해야합니다. –

답변

1

, 간단한 예로들 수 있습니다.

public class Cow extends Animal { 
    public void sound() { 
     System.out.println("MOO"); 
    } 
} 

public class Horse extends Animal { 
    public void sound() { 
     System.out.println("HEEEHREHE"); 
    } 
} 

동물에 당신이 할 수있는 일을 알 수없는, 그래서 당신은

public class Animal { 
    public void sound() { 
     System.out.println("."); 
    } 
} 

것은 당신이 당신의 배열에있는 모든 동물을 통해 서 갈 경우이 방법을 사용하는 것처럼 뭔가를해야만 사용할 수 있지만 그것을 위해 정의되었습니다.

for (int i = 0; i < 3; i++) { 
    array[i].sound(); 
} 

는 출력 것입니다 :

HEEEHREHE 
MOO 
. 
+2

이상적으로, 당신은'Animal' 클래스 (그리고'sound' 함수)를 추상적으로 만들 것입니다. 하지만 네, 그건 다른 날의 주제입니다. :) – cHao

0

를 사용하는 것이 더 적절하다고 나에게 어떤 조건을 알려 type.Please 하지-같은 참조를 사용하는 이유를 알고 싶어
개체와 동일한 참조 유형을 유지 동물 또는 말 중 하나를 'ab'유형으로 사용하십시오. 이 특별한 경우에는 동물 유형에 의해 객체를 참조하는 것이 유용하다는 것은 사실 나중에 나중에 다른 동물 객체 (예 : 동물 인터페이스를 구현하는)를 가리키고 싶을 때, 다른 장소에서는 그렇지 않습니다. 코드의 다른 위치 에서처럼 여전히 동물 유형을 변경해야합니다. 따라서 인터페이스 유형에 의한 객체 참조를 참조하면 실제 구현 인스턴스를 동적으로 변경하는 자유가 주어지며 외부에서도 구현 클래스를 숨길 수 있습니다.

Animal array[] = new Animal[3]; 
array[0] = new Horse(); 
array[1] = new Cow(); 
array[2] = new Animal(); 

당신은 몇 가지 정의 된 일반적인 방법이 있거나 그들을 확장, 각 클래스에서 지정된 수 : 당신이 동물의 배열을 필요한 경우

이 여러 차례 작동
0

같은 변수가 프로그램을 실행하는 동안 동안 다른 클래스의 객체를 참조해야 할 수있을뿐만 아니라, 종종 개방 코딩 옵션을 유지하기위한 것입니다.

고전 경우이다

List<String> myList = new ArrayList<String>(); 

컴파일러는 예를 들어 거절 할 ensureCapacity가 List 메서드가 아니기 때문에 myList.ensureCapacity (100) myList에는 List 메서드 만 사용할 수 있습니다. 프로그램이 작동하고 측정 된 후에 LinkedList를 사용하면 프로그램이 더 빨라지고 생성자 호출 만 변경됩니다. myList를 사용하여 어떤 List에서도 작동하지 않는 것은 없습니다.

관련 문제