Java - 更改引用变量

时间:2011-06-21 07:50:34

标签: java variables reference edit

所以我知道参考变量不能改变。

我处在一个有两个不同班级的位置。我们称它们为A和B.它们具有相同的方法(方法称为相同),它们只是为类指定的。

我需要一种聪明的方法来改变实例化的类。

一种方法可能是使用一些布尔测试来检查选择了哪个选项,然后实例化相应的类。虽然我担心这会变得笨重和丑陋,所以我试图避免这种方式。必须有更聪明的东西。

目前我正在考虑制作一个新类(例如C),它扩展了与A和B相同的类。

然后我会覆盖这些方法(因为A类和B类也做btw)然后根据设置执行方法(即选择了哪个A或B类)。这些方法将返回与A类或B类相同的方法。

希望我不是说完全的胡言乱语。

2 个答案:

答案 0 :(得分:6)

执行此操作的一种方法是使用Factory Pattern

维基百科的部分引言:

  

与其他创作模式一样,它   处理创造的问题   没有指定的对象(产品)   将要确切的对象类   创建

E.g。

public abstract class Base {

    public abstract void doSomething();
}

public class A extends Base {

    public void doSomething() {
        System.out.println("A");
    }
}

public class B extends Base {

    public void doSomething() {
        System.out.println("B");
    }
}

public class C extends Base {

    public void doSomething() {
        System.out.println("C");
    }
}

public interface BaseFactory {

    public Base createBase(int condition);

}

public class DefaultBaseFactory implements BaseFactory {

    public Base createBase(int condition) {

        switch (condition) {
            case 0 : return new A();
                break;

            case 1: return new B();
                break;

            case 3: return new C();
                break;

            default: return null;
                break;
        }
    }
}

答案 1 :(得分:1)

您的解释令人困惑。但听起来你应该从公共基类(或接口)扩展AB

abstract class Base {
    public abstract void someMethod();
}

class A extends Base {
    public void someMethod() { System.out.println("A"); }
}

class B extends Base {
    public void someMethod() { System.out.println("B"); }
}

这意味着你可以这样做:

Base base;
if (someCondition) {
    base = new A();
}
else {
    base = new B();
}

base.someMethod();