Java继承;从可变类型扩展而来

时间:2013-01-21 07:16:53

标签: java oop

我可以创建父类是动态的子类吗?例如;在class A extends B代码上,我可以根据条件更改B吗?如果我可以从方法返回它将是方法的返回类型?我的意思是class A extends getClassAccToCondition()返回类型。

5 个答案:

答案 0 :(得分:2)

正如其他答案已经说过这是不可能的。

对于这种问题,您可以使用工厂模式。如果你有 像这样的类层次结构:

class SuperType { ... }
class SubType1 extends SuperType {...}
class SubType2 extends SuperType {...}

你可以拥有这样的工厂:

class Factory {
  public static SuperType create (Condition cond) {
    if(cond.matchForType1())
      return new SubType1();
    else
      return new SubType2();
  }
}

您可以通过Factory.create(<condition that match for the required type>)调用此方法。

如果您搜索“工厂模式”+“java”,您会发现很多 更好的例子。

答案 1 :(得分:0)

不,您要扩展的课程必须明确说明。

答案 2 :(得分:0)

从技术上讲,它不可能在java中实现这一点。但是,我想尝试使用多态和某种工厂方法模式来解决实际的业务问题。不确定,如果这对你有帮助,但在java中无法实现不同的父级。

答案 3 :(得分:0)

您无法定义在编译时未静态输入的类。 但是,您可以在运行时生成类,请查看javassist。话虽如此,代码生成并不是唯一的选择。如果您不需要动态超类而只需要接口,则可以使用dynamic proxies

答案 4 :(得分:0)

我决定使用简单多态与工厂模式的变体。我觉得它对我有用。谢谢你的回答。

public class Main {
    public static I getClassBelongToCondition(boolean Condition) {
        if (Condition) {
            return new A();
        } else {
            return new C();
        }
    }

}

interface I {
}

class A extends B implements I {
}

class C extends D implements I {
}

class B {
}

class D {
}