2015-06-11 2 views
0

Я хочу спросить, может ли класс наследовать один класс или другой класс. Например, у меня есть класс под названием «Акционер». Теперь Акционер может быть либо Натуральным человеком, либо Правопреемником.Класс Java наследуется от одного или другого класса

У меня есть 2 класса (NaturalPerson и LegalPerson), но могу ли я выбрать один из них для того, чтобы определенный объект Акционера наследовал один из них?

Спасибо

+0

Наследование, вероятно, не является правильным представлением мира в этом случае. Взгляните на [ответ, который я дал] (http://stackoverflow.com/a/28155750/4125191) на вопрос о двойном наследовании. Можете ли вы подумать о другом способе моделирования отношений? – RealSkeptic

ответ

0

Do NaturalPerson и LegalPerson как наследовать от класса Person? В этом случае вы могли бы рассмотреть вопрос об использовании композиции подхода, как:

class Shareholder { 
    private Person person; 

    // Inject the type of shareholder person 
    // when constructing a Shareholder instance 
    public Shareholder(Person person) { this.person = person; } 

    // Other stuff specific to shareholders 
    public getName() { person.getName(); } 
} 

Таким образом, вы можете придать любой тип человека, и если вы позже получить больше «лицо» типа не существует никакого влияния на коде класса акционеров.

0

Если я правильно вас понимаю, вы говорите здесь о множественном наследовании, которое запрещено в java. Но вы можете позволить LegalPerson, а также NaturalPerson быть ShareHolder. То, что вы не можете сделать, это позволить ShareHolder расширять NaturalPerson и a LegalPerson одновременно. Класс в java может иметь только один суперкласс.

0

Если я прав, полагая, что NaturalPerson и LegalPerson являются ShareHolders, вам необходимо реализовать эту иерархию по-разному. Базовый класс/интерфейс должен быть ShareHolder, который далее может быть расширен/реализован NaturalPerson или LegalPerson. Постарайтесь подумать об этом, как о реальном сценарии. например Все автомобили - это автомобиль, но все автомобили не могут быть автомобилями, они могут быть грузовиками, автобусами и т. Д. Подобным образом все NaturalPerson в вашем случае являются ShareHolder, но все ShareHolder не могут быть NaturalPerson, они также могут быть LegalPerson.

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