Какой тип должен хранить массив при использовании композиции вместо наследования? ⇐ JAVA
-
Anonymous
Какой тип должен хранить массив при использовании композиции вместо наследования?
При использовании наследования вы можете создать два класса A и B, которые наследуются от класса C. Затем вы можете создать массив C для хранения любого из них — C[].
Однако при использовании композиции какой тип должен быть у массива для хранения любого из этих типов?
класс Entity { общедоступный внутренний идентификатор; общественная сущность () { this.id = 0; } } класс Player расширяет Entity { общественный игрок () { this.id = 1; } } класс Monster расширяет Entity { общественный монстр() { this.id = 2; } } общественный класс Main { public static void main(String[] args) { Сущность [] сущности = новая сущность [2]; сущности [0] = новый игрок (); // идентификатор == 1 сущности[1] = новый Монстр(); // идентификатор == 2 } } При использовании композиции вам придется хранить Entity как поле:
класс Entity { общедоступный внутренний идентификатор; общественная сущность () { this.id = 0; } } класс Игрок { Сущность; общественный игрок () { this.entity = новая сущность(); this.entity.id = 1; } } класс Монстр { Сущность; общественный монстр() { this.entity = новая сущность(); this.entity.id = 2; } } общественный класс Main { public static void main(String[] args) { Игрок игрок = новый игрок(); Монстр-монстр = новый Монстр(); Сущность [] сущности = новая сущность [2]; // TODO: не сработает! какой тип? сущности[0] = игрок; сущности[1] = монстр; } }
При использовании наследования вы можете создать два класса A и B, которые наследуются от класса C. Затем вы можете создать массив C для хранения любого из них — C[].
Однако при использовании композиции какой тип должен быть у массива для хранения любого из этих типов?
класс Entity { общедоступный внутренний идентификатор; общественная сущность () { this.id = 0; } } класс Player расширяет Entity { общественный игрок () { this.id = 1; } } класс Monster расширяет Entity { общественный монстр() { this.id = 2; } } общественный класс Main { public static void main(String[] args) { Сущность [] сущности = новая сущность [2]; сущности [0] = новый игрок (); // идентификатор == 1 сущности[1] = новый Монстр(); // идентификатор == 2 } } При использовании композиции вам придется хранить Entity как поле:
класс Entity { общедоступный внутренний идентификатор; общественная сущность () { this.id = 0; } } класс Игрок { Сущность; общественный игрок () { this.entity = новая сущность(); this.entity.id = 1; } } класс Монстр { Сущность; общественный монстр() { this.entity = новая сущность(); this.entity.id = 2; } } общественный класс Main { public static void main(String[] args) { Игрок игрок = новый игрок(); Монстр-монстр = новый Монстр(); Сущность [] сущности = новая сущность [2]; // TODO: не сработает! какой тип? сущности[0] = игрок; сущности[1] = монстр; } }
Мобильная версия