将变量传递给一个子类

时间:2016-06-07 00:13:58

标签: java

我是非编程人员,编码风险很小,但我想修改现有的代码库。我已经大大简化了我正在使用的代码。如果我能提供任何进一步的信息或者这根本没有意义,请告诉我!词汇很难。 :)

在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
}

2 个答案:

答案 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班放在另一个包里。