2014-09-03 4 views
0

누구나 유형 대체를 사용해야하는 이유를 설명 할 수 있습니까?이유 유형 대체를 사용하십시오

class Circle extends Shape{ 
    ... 
} 

. 
. 
. 

class Main{ 
    public static void main(String[] args){ 
     Shape s = new Circle(); 
     ... 
    } 
} 

위의 코드에서 가능한 이점은 무엇입니까? 일반적으로

public static void main(String[] args){ 
    Circle c = new Circle(); 
} 

은 필요한 작업을 쉽게 처리했을 것입니다.

+0

그런 일반적인 질문에 대해서는 여기에서 질문하는 것이 좋습니다. – talex

+0

다음은 도움이 될 수 있습니까? http://stackoverflow.com/questions/11064409/why-to-use-polymorphism –

+0

실제 프로그램은이 장난감 예보다 훨씬 복잡하기 때문에 – chrylis

답변

3

이 현상을 상속을 통해 다형성이라고합니다. 즉, 호출되는 참조가 아닌 객체가 호출되는 런타임에 사용자의 동작이 결정됩니다.

음. 귀하의 본보기를 더욱 확장시킬 수 있습니다. 첫째, ShapeDrawer을 이제 클래스 계층에게

class Shape{ 
     public void draw(){} 
} 

class Circle extends Shape{ 
     public void draw(){ 
      //mechanism to draw circle 
     } 
} 

class Square extends Shape{ 
     public void draw(){ 
      //mechanism to draw square 
     } 
} 

을 생성의 문제는이 또한이 경우 느슨한 결합 시스템

Class ShapeDrawer{ 
    private Shape shape; 

    public void setShape(Shape shape){ 
     this.shape = shape; 
    } 

    public void paint(){ 
     shape.draw(); 
    } 

} 

을 만드는 데 도움이 깨끗한 코드

class Canvas{ 
    public static void main(String[] args){ 
     List<Shape> shapes = new ArrayList<>(); 
     shapes.add(new Circle()); 
     shapes.add(new Square()); 

     // clean and neat code 

     for(Shape shape : shapes){ 
       shape.draw(); 
     } 

    } 
} 

으로 이어질 수있는 방법을 볼 수 있도록하자 실제 모양과 매우 느슨하게 결합됩니다. ShapeDrawer도 그림이 Shape의 어떤 유형인지 알 수 없으며 그림 그리기의 메커니즘도 으로 추상화되어 있습니다. 특정 모양 그리기의 기본 메커니즘은이 클래스에 영향을주지 않고 변경할 수 있습니다.

+0

고마워요, 도움이 ... – bytestorm

+0

당신은 오신 것을 환영합니다. – Adi

관련 문제