gpt4 book ai didi

Java继承和 Activity

转载 作者:行者123 更新时间:2023-12-01 04:39:21 25 4
gpt4 key购买 nike

我有 A 类,它配置自身来解析 xml 文件。 B 类扩展了 A 并配置自身来解析一个比前一个具有更多标签的 xml 文件。

class A {
protected String mFoo;

protected loadFromXml (...){
...
mFoo = ...
...
}
}

class B extends A {
protected String mBar;

protected loadFromXml (...){
super.loadFromXml(...);

...
mBar = ...
...
}
}

现在,我有 ActivityA,它通过 A 类配置自身:

class ActivityA extends Activity {

protected A mAInstance;

public void onCreate(Bundle savedInstanceState) {
...
mAInstance.loadFromXml(...);
...
other code...
...
}
}

和 Activity B:

class ActivityB extends ActivityA{

protected B mBInstance;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

...
mBInstance.loadFromXml(...);
...
}
}

现在的问题是:ActivityB 持有 mAInstance 和 mBInstance,它们共享相同数据的子集 (mFoo)。如何只加载mBInstance?我当然需要在 ActivityB 的 onCreate 中调用 super...

最佳答案

首先,我假设 ActivityB 扩展了 ActivityA,否则无法从 ActivityB 访问 A。

然后,您可以从 B 中删除 mBInstance,因为您已经有了可用的 A 类型。加载 xml 时,将对 loadFromXML 的调用移至新方法,例如:

在 Activity A中:

protected onCreate(...) {
....
loadXML();
}

protected void loadXML() {
getNewInstance().loadFromXML();
}

protected A getNewInstance() {
return new A();
}

然后在 ActivityB 中,您只需重写 getNewInstance() 即可:

protected A getNewInstance() {
return new B();
}

同时从 ActivityB#onCreate(...) 中删除 mBInstance.loadFromXml(...);多态性来拯救!

关于Java继承和 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com