2016-06-04 2 views
0

나는 패키지를 각각 Load();MoveEvent();는, TouchEvent();가 ...자바 패스 클래스를 변수 유형으로 사용 하시겠습니까?

나는라는 변수에 어떻게 든 선택한 수준의 클래스를 저장할

myLevel

을 말할 수와 같은 몇 가지 방법이 levels와 클래스 level_default, level_hard ...

그러면 예를 들어 myLevel.Load();을 사용하여 해당 저장된 레벨에서 load 메소드를 호출 할 수 있습니다.


지금까지 내가 스위치를 사용하고하면 선택한 수준에서 필요한 메소드를 호출하는 루프.
(... case "1": levels.level_default.load(); break; case "2": levels.level_hard.load(); ...)

그러나 그것은 다음과 같이 수행 할 수있는 방법을 그래서 난 그냥 레벨을 선택하고 내가 전화를 사용하고 수준을 모든 시간을 확인하지 않고 그 방법을 사용할 수 있습니다 그 수준의 방법?

+2

수퍼 클래스 '레벨'을 만들고 그 안에 메소드를 정의 할 수 있습니다. 그런 다음'Default','Hard' ... 하위 클래스를 만들고'Level'을 확장합니다. 그러면'Level'의 객체를 가질 수 있고'Level lev = new Hard();'(또는'Default')처럼 초기화 할 수 있습니다. 그렇게하면'lev' 메서드를 호출하면됩니다. 그러면 자동으로 특정 클래스에서 필요한 메서드가 호출됩니다. – Hackerdarshi

+1

http://www.oracle.com/technetwork/java/codeconventions-135099.html – Tom

+0

@Hackerdarshi 고마워요, 지금까지 저에게 효과가 있습니다! – Vepir

답변

1

이것은 다형성을 사용하는 가장 좋은 기회입니다. AbstractLevel, ILevel 등의 기본 클래스 또는 인터페이스를 만드는 것이 좋습니다. 그렇지만 필요한 하위 클래스를 많이 만들거나 클래스를 구현할 수 있습니다. 각 클래스는 기본으로 설명 된 API에 대한 고유 한 특수 정의를 제공합니다. 이 메서드를 호출하면 올바른 메서드를 사용하는 것에 대해 "생각할 필요가 없습니다."다형 클래스에서 호출된다는 사실 때문에 올바른 메서드를 사용할 것입니다. 빠른 Google 검색을 사용하면 나를 this article으로 데려다 줄 수 있습니다.

정말로 질문에 대답하려면 here is an article that talks about runtime type detection in Java.