2011-12-27 6 views
1

저는 프로그래밍 초보자입니다. 런타임 다형성의 궁극적 인 용도는 무엇입니까?런타임 다형성 사용

예 :

class Parent 
{ 
    //do something 
} 
class Child : Parent 
{ 
    //do something 
} 

main() 
{ 
    Parent p = new Child(); // run-time polymorphism 
    Child q = new Child(); // no polymorphism 
} 

질문, 우리는 런타임 다형성을 달성하는 첫 번째 행 (Parent p = new Child();)를 사용하지만, 우리는 먼저 하나 대신 두 번째 행 (Child q = new Child();) ....

를 사용할 수 있다는

두 가지의 차이점은 무엇입니까? 왜 우리는 런타임 다형성을 사용합니까?

+0

이 질문은 정말 당신의 코드는 또한 여러 가지 다른 게시물에 SO에 논의 된 – mydogisbox

+0

에 속한다. – ivowiblo

+0

copiles 그래서 나는 자식과 부모 사이의 상속을 추가 한 programmers.stackexchange.com –

답변

4

제공하신 코드 스 니펫을 실제로 사용할 수 없습니다. 그러나이 방법에 대해 생각 :

public void DoSomething(Parent parent){ ... } 

당신은이 작업을 수행 할 수 있습니다

이 경우
Child child = new Child(); 
DoSomething(child); 

는, 해봐요 것은 단지 부모가 될 것입니다. 서브 클래스인지 여부는 상관하지 않습니다.

희망이 있습니다. 즉 가난한 예 이유

+1

런타임 다형성의 궁극적 인 사용은 일반화입니다. 수퍼 클래스를 사용하는 메소드에서 서브 클래스를 사용할 수있게함으로써 코드 재사용을 촉진합니다. 나는 ivowiblo가지고 있다고 생각하는 것입니다. 공통 수퍼 클래스와 관련된 각 객체에 대해 별도의 메소드를 작성하고 싶지는 않습니다. – adamjmarkham

+0

@ivowiblo ... 감사합니다. 설명이 나를 도와줍니다. :) – Usman

5

귀하의 예를 보여줍니다 있지만,이 같은 사진 뭔가 :

공장이 호출
main() 
{ 
    Parent p = Factory("SomeCondition"); ///run-time polymorphism 
} 

Parent Factory(string condition) 
{ 
    if (condition == "SomeCondition") 
    { 
     return new Child(); 
    } 
    else 
    { 
     return new Parent(); 
    }  
} 

, 우리는 반환 형식이 실제로있을 것이다 모르겠어요, 그것은이 될 수 자녀, 부모가 될 수 있습니다.

0

기본 사용은 인스턴스화를위한 것이 아니며 앞에서 보았 듯이 단일 조인 세트를 사용하여 공통 조상으로부터 상속 된 모든 객체를 처리합니다.

이러한 사용 예로는 개체를 매개 변수로 메서드에 전달하거나 다양한 형식의 개체 컬렉션을 반복하고 모든 개체에서 동일한 작업을 수행하는 등이 있습니다.

1

런타임 다형성의 궁극적 인 사용은 일반화입니다. 공통 수퍼 클래스의 서브 클래스를 사용하여 코드 재사용을 촉진합니다. 각기 다른 클래스의 각 객체에 대해 별도의 메소드를 작성하지 않으려 고하면 지루할 수 있습니다.

런타임 다형성을 사용하면 많은 다른 하위 클래스에서 사용할 수있는 일반화 된 코드를 작성할 수 있습니다.

1

더 간단한 예는 다음과 같습니다. 각 동물은 다른 음식을 먹을 수 있고 먹이는 방법에 대해 다른 논리를 가질 수 있습니다. 그러나 그 방법이 기대 규칙을 따른다는 "방법"과 유일한주의를 추상합니다.

저는 개인적으로 인터페이스가 다형성의 유용성을 볼 수있는 좋은 방법이라고 생각합니다. 그것들을보세요.

class Pet 

class Cat : Pet 

class Persian : Cat 

class Dog : Pet 

class Chiwawa : Dog 

main{ 
Pet myPet = new Persian(); 
if(myPet.IsHungry())  
myPet.feed(); 

myPet = new Chiwawa() 

if(myPet.IsHungry()) 
myPet.Feed() 
}