【发布时间】:2021-10-06 01:54:30
【问题描述】:
假设我有这个不可修改的类:
public abstract class MyClass {
int value;
/** @version 1.0 */
MyClass(int value) { this.value = value; }
}
这是“1.0 版”程序的代码。 “1.1版”有这个:
public abstract class MyClass {
String value;
/** @version 1.1 */
MyClass(String value) { this.value = value; }
}
我需要在使用 1.0 API 时初始化 1.1 构造函数。例如:
/** initializing on version 1.0 */
MyClass clazz = new MyClass("str");
显然不起作用,因为 1.0 API 需要一个 int。另一个问题是类是抽象的。我也不能将 1.1 API 用于与我的应用程序相关的非常具体的事情。那么,用意想不到的参数初始化抽象类的方法是什么?反射会丢弃 InstantiationException。
【问题讨论】:
-
为什么你认为你可以实例化一个抽象类?
-
因为我可以直接 = new MyClass(100)。而且我需要用一个意想不到的论点来做到这一点,
-
你不能。您所拥有的实际上是编译器不允许您编译的语法错误。最好告诉我们到底发生了什么,你的问题毫无意义。
-
@LeopardLGD 你当然不能做
new MyClass(100),因为MyClass是abstract。请检查该假设。 -
new MyClass(100)工作的唯一方法是在该语句之后指定一个类主体,创建一个匿名子类。
标签: java class oop initialization abstract