2016-01-22 222 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?

主要问题是我想在Android中传递一个类B的实例作为一个包,但这不起作用,没有错误,只是数据没有通过。所有的属性和数据都会通过,除了那个似乎是循环依赖的属性。

是否有一个原因,这是一个很好的做法?或者它不是一个好主意?

+2

为了弄清楚你是否将它改为'private B propB = new B()',你将得到一个堆栈溢出......这是对另一个消失的评论的回应。 –

+0

为什么不只是传递对象B作为捆绑包?当你尝试创建B类的新实例时,你肯定会得到堆栈溢出。 – kopikaokao

+0

因此,这是一个好习惯,有一个属性是该超类的一个子类,它是属性? – reidisaki

回答

0

在任何情况下都不会发生错误,因为B对象只有A的私有字段,并且不会被初始化。 但是,如果您创建一个新的B实例,则只能创建一个新的对象A()。

,如果你想使用
objectA.propB.propB.propB .......
你可以得到NullPointException。

0

数据未被传递的原因是因为包裹。我没有在子类B上调用super(in),所以虽然没有错误,但没有任何数据通过。

相关问题