Я немного смущен точно о том, как полиморфизм и расширяющиеся классы и т. Д. Работает в Java при создании объектов из этих классов.Полиморфизм в Java и создание объектов из этих классов
У меня недавно возникла проблема, которую кто-то здесь помог мне решить (см. Not able to access object sub class's variable? (Java/Android)) для фона.
Я пытался создать объект так:
Quad hero = new Hero();
Где герой был подкласс Quad();
У меня были переменные в классе Hero, для которых я не был выше доступа.
Решение было изменить создание объекта для:
Hero hero = new Hero();
делает это через мой объект героя, я был в состоянии получить доступ ко всем методам и переменным в обоих моих классах Quad и Hero.
Мой вопрос сейчас - почему это?
И с этим в виду, когда это было бы полезно использовать свой оригинальный метод:
Quad hero = new Hero();
Это один имеет смысл для меня, как герой также четырехъядерный. Я неоднократно видел этот тип декларации в примерах Java-кода и думал, что понял, но недавние события доказали обратное.
Был бы признателен, если кто-то может объяснить это для меня - спасибо
Хммм ... интересный @jlordo, спасибо. Так что, если бы у меня было, например, враг1, враг2, враг3 и герой, все они были созданы как квадроциклы и хотели сгруппировать их в массив, тогда я смог бы, так как все они - Квады? Но как я могу получить доступ к переменным, которые хранятся только в подклассах? (скажем, например, у подкласс класса Hero есть переменная, хранящаяся в ней, что класс Enemy не делает. Как мне получить доступ к этим переменным, поскольку они не находятся в базовом классе? Я не могу добраться до них через объект, не меняя это тип Герою, но тогда я не могу сгруппировать его с Врагами? Спасибо! – Zippy
@Zippy: Это зависит от того, как вы хотите получить доступ к этим переменным и что вы хотите с ними делать.Вы можете безопасно отбрасывать, если вы сначала проверите с оператором 'instanceof'. Я бы предпочел сделать интерфейс «Quad» (или абстрактный класс) и использовать его только методы. В любом случае переменные должны быть инкапсулированы, поэтому вы можете получить к ним доступ с помощью методов в классах. – jlordo
Спасибо @jlordo - могу я попросить вас отредактировать ответ, чтобы привести пример выше комментария? (о том, как получить доступ к переменным, как я описал в своих комментариях? Обычно мне легче понять, используя примеры), - тогда я прочитаю и отметю ваш ответ - еще раз спасибо, очень ценю! – Zippy