2015-07-09 2 views
2

Какой является лучшей практикой, делать что-то вроде этогоУдлинение или передавая в качестве аргумента

public class A { 
    private B b; 

    public A() { 
     b = new B(this); 
    } 
} 

public class B { 
    private A a; 

    public B(A a) { 
     this.a = a; 
    } 
} 

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

+0

Это нехорошо, думаю, что пример с реальными объектами. – Andrew

+0

use extends, когда A - это своего рода B., как Cat - это животное. поэтому Cat расширяет Animal. – Kachna

+0

Общее мнение в наши дни состоит в том, чтобы * предпочесть состав над наследованием *. –

ответ

2

Все зависит от конкретной ситуации.

Давайте предположим, что класс представляет собой Car, то
если B является Engine, то вы должны использовать композицию (Car имеет двигатель)
если B является RaceCar, то вы должны пользуйтесь наследованием (RaceCar - лучший автомобиль)

Если у вас есть сомнения, текущая тенденция в разработке программного обеспечения состоит в том, чтобы предпочесть состав над наследованием.

+0

Спасибо, хорошее объяснение! – Joeav

0
  • Наследование: Наносить IS-A тест.
  • состав: Наносить HAS-A отношения,
0

это зависит от того, что вы собираетесь достичь.. Как и в случае с Win.ubuntu, использование используется в случае кошки/животного. Но если вы хотите, чтобы что-то вроде автомобиля имело двигатель, используйте второй пример.