Java Это множественное наследование? Или приемлемо сделать? - PullRequest
0 голосов
/ 29 января 2020

Можно ли в игровом мире расширить AnimationTimer, а затем иметь разные карты, унаследованные от Gameworld?

public abstract class GameWorld extends AnimationTimer{}

public class Maze extends GameWorld {}
public class BossMap extends GameWorld {}

Ответы [ 3 ]

2 голосов
/ 29 января 2020

Да, то, что у вас там, совершенно нормально. Это не множественное наследование. У каждого класса есть только один прямой родитель.

Множественное наследование невозможно в Java. Но он поддерживает многоуровневое наследование. Однако, помимо расширения одного класса, вы можете реализовать столько интерфейсов, сколько и вы sh, что позволяет классу быть полиморфным c (т. Е. Быть более чем одним типом вещей одновременно).

2 голосов
/ 29 января 2020

Марвин прав, я просто хотел добавить, что когда вы используете наследование, очень приятно помнить, что это тест. Вы утверждаете, что Maze и BossMap - оба GameWorlds. Я верю, что это правда (хотя называть игру «Мир» может ввести в заблуждение, я бы сказал, что это игра «Карта»)

Множественное наследование было бы, если бы вы сказали, что BossMap - это Gameworld AND BossMap - это "AnimationTimer" (напрямую). Это вполне возможно, но приводит к проблемам, и Java запрещает отношения между двумя родителями из-за проблем, которые часто возникают.

Ваше решение в порядке, но может привести к излишне тесным отношениям между объектами. .

Другое решение - Java интерфейсы. Интерфейсы - это отношения "есть". BossMap мог бы иметь - игровой мир и иметь - TimedEvent. Gameworld также может иметь TimedEvent. Интерфейсы всегда будут работать и, как правило, их будет легче понять.

Поскольку отношение Has-a является «более слабым» и, следовательно, часто проще для понимания / работы с ним, мы обычно предлагаем, чтобы вы предпочли реализации (интерфейс), а не расширения ( наследовать) но это баланс - со временем вы сами определите свои предпочтения.

1 голос
/ 29 января 2020

Да, это совершенно нормально.

Каждый экземпляр Maze теперь является экземпляром Gameworld, а каждый экземпляр Gameworld - экземпляром AnimationTimer.

=> Каждый экземпляр Maze также экземпляр для AnimationTimer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...