【发布时间】:2017-01-31 10:29:37
【问题描述】:
我有一个 Android 应用来帮助收集动物观察数据。它有一个活动 ObserveAnimal 和一个具有普通 getter 和 setter 的模型 Animal。
我正在创建具有扩展功能和扩展数据的应用程序的不同风格,用于鸟类观察。 ObserveBird 扩展 ObserveAnimal 和 Bird 扩展 Animal。 ObserveBird 添加了一些额外的方法。
public class Animal {
private String species;
// there are more fields and public getters and setters ...
}
public class Bird extends Animal {
private int wingLength;
// public getters and setters ...
}
问题是我找不到正确的方法来声明和初始化 Bird。我尝试了几种方法,例如:
public class ObserveAnimal extends AppCompatActivity {
protected Animal a = new Animal();
}
public class ObserveBird extends ObserveAnimal {
protected Bird a = new Bird();
}
ObserveAnimal 和 Animal a 可以很好地协同工作。
但是在ObserveBirdBird a 声明中隐藏了Animal a 声明,我最终得到了两个不同的实例。实例Animal a 从ObserveAnimal 中的代码获取其species 字段集,实例Bird a 从ObserveBird 中的代码获取其wingLength 字段集。
我试图在ObserveBird 中设置一个Bird a 实例,其中species 从ObserveAnimal 中的代码设置,wingLength 从ObserveBird 中的代码设置。
当我开始活动 ObserveBird 时,我想要一个实例 Bird a(并且没有其他 Animal 实例)。
如何在不将大量代码从 ObserveAnimal 复制到 ObserveBird 的情况下做到这一点?
【问题讨论】:
-
显示
Animal和Bird的声明的样子。 -
Java 中只能扩展一个类,但如果需要,可以实现多个接口。 See this link
-
活动不是模型,不要试图这样对待它
-
@MarcinOrlowski 我添加了动物和鸟类声明。
-
@TimCastelijns 活动和模型是分开的。这些活动有更多的代码,如 OnCreate(),一个带有视图等的布局,我认为与问题无关。活动使用 Animal 和 Bird 的 getter 和 setter。我添加了模型声明以澄清问题。