2013-08-21 3 views
0

Возможно ли реализовать композицию на Java? Если мы создадим класс A и будем использовать экземпляр этого класса в классе B, то как мы можем гарантировать, что A не может самостоятельно создать отдельный объект?Код Java для композиции

+0

так на основе ответов, которые я получаю, я могу с уверенностью заключить, что невозможно реализовать композицию на Java, за исключением использования внутреннего класса (что слишком очевидно). Поэтому третий класс не может быть включен в качестве композиции. –

+0

Если у вас есть сторонний класс, для которого вы «не можете создать независимый объект», как вы можете использовать его в композиции? –

+0

@AmitKhanna: Конечно, я могу создать объект третьего класса. Я просто хочу подтвердить, что класс третьей стороны никогда не может использоваться в композиции (могу ли я сделать объект или нет). –

ответ

2

Я не думаю, что это возможно. Единственное подобное решение состоит в том, чтобы создать A как частный внутренний класс B. Тогда не кто-то, кроме B, может создать экземпляр A.

1

Вы могли бы создать свои скомпонованные классы как внутренний класс вашего класса контейнера.

class ContainerClass{ 

    class ContainedClass1{ 

    } 

    class ContainedClass2{ 

    } 

} 

Таким образом, они привязаны к экземпляру ContainerClass и не может быть создана без экземпляра одного и того же. Вы можете сделать их частными, тогда они могут быть созданы только в классе

+0

можно усовершенствовать или дать образные примеры. –

+0

@qualtar Это в основном тот же ответ, что и принятый. –

0

Если я правильно понял, вы правильно задаете вопрос, что вы хотите, это внутренний класс. По существу для создания внутреннего класса вы пишете класс A внутри класса B.

0

Вы можете создать класс A как статический внутренний класс B и сохранить конструктор A как закрытый. Тогда только B может использовать этот конструктор.

Некоторые ссылки для справки:

scope of private constructor in Nested Class

0

Может быть, вы можете использовать загрузчики классов, чтобы определить, если класс загружается из B или не