【发布时间】:2013-10-08 05:25:28
【问题描述】:
我有一个对象A,在实例化之后,我对其状态进行各种操作。在A 的方法中,我需要创建另一个类的多个实例(称为B)。 B 对象类在很大程度上依赖于A 的大部分状态,并且实例可以影响A 的状态。
问题如下。由于A 已经实例化,并且在调用A 中的方法之前已经对其状态进行了操作,这些方法需要对B 进行任何实例化,因此我如何使用继承来编写B 的类,因为我这样做了不想在B 中调用super()(因为A 已经实例化了)?
我必须在这里将B 的课程与A 的课程结合起来吗?
public class Test {
public static void main(String[] args) {
ClassA instanceA = new ClassA(5000000L); //Initial instantiation and state-setting operation to A.
instanceA.update(); //Try to get A to create B, where B relies on A's new state from previous operations.
}
}
class ClassA {
long tempLong;
ClassB instanceB;
public ClassA(long setLong) {
tempLong = setLong;
}
public void update() {
this.instanceB = new ClassB(); //instanceA needs an instanceB to work with.
}
}
class ClassB extends ClassA {
long tempLong2;
public ClassB() {
// I don't want to call super() here because instanceA is already created and instanceA's state is already set!;
this.tempLong2 = super.tempLong*2; //instaceA's state is necessary for instanceB to function!
}
}
【问题讨论】:
-
使用代码,您可以在 2 行中说出您的问题。
-
你在一个阶段有HAS-A和IS-A关系?就像被问到的问题一样,它真的有意义吗?
-
您的代码设计有问题。每当我在我的代码中创建一个超类依赖于它自己的一个子类时,我最终发现我需要重构以摆脱依赖。你想用这个来完成什么? (例如,如果每个
ClassA对象在内部需要一个ClassB对象,那么每个ClassB对象也需要一个(因为它也是一个ClassA)。这在哪里停止? -
@TedHopp 我想要的只是一个
ClassB,它可以使用instanceA的所有状态。我不关心它访问ClassA方法的能力。有这样的功能吗?
标签: java inheritance subclass superclass