1

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

4

5 回答 5

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”,你会发现很多更好的例子。

于 2013-01-21T07:34:40.857 回答
0

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

于 2013-01-21T07:20:53.313 回答
0

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

于 2013-01-21T07:54:19.153 回答
0

您不能定义在编译时不是静态类型的类。但是,您可以在运行时生成类,看看javassist。话虽如此,代码生成并不是唯一的选择。如果您不需要动态超类而只需要一个接口,则可以使用动态代理

于 2013-01-21T08:33:50.027 回答
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 {
}
于 2013-01-21T10:19:55.423 回答