2016-06-04 1 views
0

У меня есть пакет levels и классы level_default, level_hard ... каждый из которых имеет некоторые методы, как Load();, MoveEvent();, TouchEvent(); ...Класс передачи Java как переменный тип?

Я хочу сохранить как-то выбранный класс уровня в переменной с именем позволяет говорить myLevel

Так что тогда я могу использовать, например, myLevel.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.

Смежные вопросы