我是非编程人员,编码风险很小,但我想修改现有的代码库。我已经大大简化了我正在使用的代码。如果我能提供任何进一步的信息或者这根本没有意义,请告诉我!词汇很难。 :)
在ClassA中,我正在实例化ClassB的子类。我想做的改变要求新的变量“myVar”(在ClassA中设置)可用于子类ClassC但不是子类ClassD。将该变量提供给ClassC的最合适的方法是什么?
ClassA的:
public class ClassA {
private String myVar = "hi";
private String myStuff = "bye";
private int myOption = 1;
private String getMyClass(String myStuff) throws Exception {
final MyClassChoice myClass = getMyClassChoice(myOption);
return myClass.getResponse(myStuff);
}
private MyClassChoice getMyClassChoice(myOption) {
switch(myOption) {
case 1:
return new ClassC();
case 2:
return new ClassD();
}
}
}
ClassB的:
public class ClassB {
public abstract String getResponse(String myStuff) throws IOException;
}
ClassC:
public class ClassC extends ClassB {
// do stuff with myStuff
// do stuff with myVar
}
D类:
public class ClassD extends ClassB {
// do stuff with myStuff
}
答案 0 :(得分:2)
在实例化对象时将其传递给构造函数并将其保存在实例变量
中public class ClassA {
// ...
private MyClassChoice getMyClassChoice(myOption) {
switch(myOption) {
case 1:
return new ClassC(myVar);
case 2:
return new ClassD();
}
}
}
public final class ClassC extends ClassB {
private String myVar;
// constructor:
public ClassC(String myVar) {
this.myVar = myVar;
}
// do stuff with myStuff
// do stuff with myVar
private void doStuff() {
System.out.println(myVar);
}
}
或者在使用它时将其传递给方法,
public final class ClassA {
// ...
public void someMethodUsingClassCDoStuff() {
myClass.doStuff(myVar);
}
}
public final class ClassC extends ClassB {
// do stuff with myStuff
// do stuff with myVar
public void doStuff(String myVar) {
System.out.println(myVar);
}
}
答案 1 :(得分:-1)
首先,让你的变量myVar在calss A中受到保护。 将您的A,B,C类放在同一个包中。 把你的D班放在另一个包里。