我可以创建父类是动态的子类吗?例如;在class A extends B
代码上,我可以根据条件更改B
吗?如果我可以从方法返回它将是方法的返回类型?我的意思是class A extends getClassAccToCondition()
返回类型。
答案 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 {
}