2014-03-12 3 views
1

그래서 play 메소드라는 렌더링이있는 추상 클래스가 필요하다고 가정 해 보겠습니다.추상 렌더링 방법은 어떻게 작동합니까? (Java)

public abstract class RenderPanel{ 

    public abstract void render(); 

} 

그리고 나서 게임 루프를 사용하여 render 메소드를 호출하는 다른 클래스가 있습니다.

public class Window implements Runnable{ 

public void run(){ 

    while(running){ 
     RenderPanel.render(); 
     Thread.sleep(5000); 
    } 
} 

} 

추상 클래스를 정적으로 호출 할 수 없기 때문에이 코드는 작동하지 않으며 클래스를 인스턴스화 할 수 없습니다.

그래서 어떻게 RenderPanel의 하위 클래스를 만들면 서브 클래스의 render 메서드가 자동으로 호출 될 수 있습니까?

public class SubRender extends RenderPanel{ 
     @Override 
     public abstract void render() 
     { 
      //Do your stuff here 
     } 

} 

그런 다음 해당 SubRender의 인스턴스를 만들려고하고 RenderPanel로 사용 :

+0

@martynas 그러나 생성자는 어떻게 호출 될까요? 내가 아는 한 추상 클래스의 생성자는 호출 할 수 없으며 하위 클래스의 생성자 만 호출 할 수 있습니다. – FidgetyTheGamer

답변

2

Java는 런타임 유형 정보 (RTTI)를 유지합니다. 즉, 기본 클래스 객체에 대한 참조를 보유하더라도 하위 클래스의 메서드가 호출됩니다 (해당 메서드가 하위 클래스에 의해 재정의 된 경우). 따라서 하위 클래스 메서드를 호출 할 때 아무 것도 할 필요가 없습니다.

public class SubRenderPanel extends RenderPanel{ 
    @Override 
    public abstract void render() 
    { 
     //Do your stuff here 
    } 
} 

public class Window implements Runnable{ 
    RenderPanel r = new SubRenderPanel(); 
    public void run(){ 
     while(running){ 

      r.render(); 
      Thread.sleep(5000); 
     } 
    } 
} 
0

아이디어는 RenderPanel를 확장하는 새로운 클래스를 생성 한 것을 사용하는 것입니다

public class Window implements Runnable{ 

public void run(){ 

    while(running){ 
     //The subRender will act as a RenderPanel, so class specific functions will be hidden. Is just like using an java interface. 
     RenderPanel r = new SubRender(); 
     r.render(); 
     Thread.sleep(5000); 
    } 
} 

} 

지금 가지고있는 것은 기본적으로 인터페이스로 사용되는 추상 클래스입니다. 대신 인터페이스를 사용하는 것이 좋습니다. 추상 클래스는 객체의 "유형"에 공통적 인 동작을 제공하는 데 가장 일반적으로 사용되며, "유형"의 렌더링이 필요한 경우가 있습니다.

그러나 공통적 인 동작이 누락되었으므로 대신 인터페이스를 사용합니다.

인터넷을 통해 제공되는 Java 자습서를 공부하십시오. 이것은 아주 기본적인 자바 질문입니다. Java 인터페이스, 하위 클래스 (다형성)를 검색합니다.

관련 문제