所以我知道参考变量不能改变。
我处在一个有两个不同班级的位置。我们称它们为A和B.它们具有相同的方法(方法称为相同),它们只是为类指定的。
我需要一种聪明的方法来改变实例化的类。
一种方法可能是使用一些布尔测试来检查选择了哪个选项,然后实例化相应的类。虽然我担心这会变得笨重和丑陋,所以我试图避免这种方式。必须有更聪明的东西。
目前我正在考虑制作一个新类(例如C),它扩展了与A和B相同的类。
然后我会覆盖这些方法(因为A类和B类也做btw)然后根据设置执行方法(即选择了哪个A或B类)。这些方法将返回与A类或B类相同的方法。
希望我不是说完全的胡言乱语。
答案 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)
您的解释令人困惑。但听起来你应该从公共基类(或接口)扩展A
和B
:
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();