【问题标题】:Class B extends Class A but class A has a property of class BB 类扩展了 A 类,但 A 类具有 B 类的属性
【发布时间】:2016-01-22 03:40:58
【问题描述】:

所以我知道这很令人困惑,但为什么会这样呢?如果我有

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 类实例作为包传递,但这不起作用,没有错误,只是数据没有通过。除了似乎是循环依赖的一个属性之外,所有属性和数据都通过了。

这是一种好的做法有什么原因吗?或者这不是一个好主意?

【问题讨论】:

  • 澄清一下,如果您将其更改为 private B propB = new B(),您会收到 Stack Overflow...这是对另一条消失的评论的回应。
  • 为什么不直接将对象 B 作为包传入呢?当您尝试创建 B 类的新实例时,您肯定会遇到堆栈溢出。
  • 所以这是一个很好的做法,让一个属性成为它的属性的超类的子类?

标签: java android inheritance parcelable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2021-10-15
      相关资源
      最近更新 更多