2016-01-22 3 views
0

Так что я знаю, что это сбивает с толку, но почему это работает? Если у меня естьКласс B расширяет класс A, но класс A имеет свойство класса B

public class A implements Parcelable{ 
    private B propB; 
} 

public class B extends A implements Parcelable{ 
    private int stuff; 
} 

так, если я когда-либо создал

A objectA = new A(); 

не будет ли бесконечный цикл этого: objectA.propB.propB.propB?

Основная проблема заключается в том, что я хочу передать экземпляр класса B в android в виде пакета, но это не работает, нет ошибки, просто данные не пройдены. Все свойства и данные передаются за исключением одного свойства, которое, как представляется, является циклической зависимостью.

Есть ли причина, почему это хорошая практика? или это просто не очень хорошая идея?

+2

Чтобы уточнить, изменили ли вы его на 'private B propB = new B()', вы получили бы переполнение стека ... это было в ответ на другой комментарий, который исчез. –

+0

Почему бы не просто пройти в объекте B как пучок? Вы, безусловно, получите переполнение стека, когда вы попытаетесь создать новый экземпляр класса B. – kopikaokao

+0

Итак, это хорошая практика иметь свойство, которое будет подклассом того суперкласса, которым это свойство? – reidisaki

ответ

0

В любом случае ошибки не возникает, поскольку объект B является только частным полем A и не является инициализацией. , но если вы создаете новый экземпляр B, вы создаете только новый объект A().

, если вы хотите использовать
objectA.propB.propB.propB .......
вы можете получить NullPointException.

0

Причина, по которой данные не проходят, обусловлена ​​посылками. Я не называл super (in) в подклассе B. так что, хотя ошибки не было, не было никаких данных, проходящих через них.

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