我有一个我无法访问其源代码的类。
public class IDontHaveAccessToSource {...}
我想为它添加一些方法,如下所示:
public class MyClass extends IDontHaveAccessToSource {
myMethod1() {...}
myMethod2() {...}
@Override
methodInIDontHaveAccessToSource(){...}
}
但ClassCastException
每当我想投射任何返回IDontHaveAccessToSource
到MyClass
.
我怎么能做这样的事情?
我不想使用
public class MyClass {
IDontHaveAccessToSource obj;
MyClass(IDontHaveAccessToSource obj) {
this.obj = obj;
}
...
}
并且没有任何构造函数可用于IDontHaveAccessToSource
. 它通过从另一个类调用函数来“创建”:
IDontHaveAccessToSource obj = loadObject(filename);
您不能将更一般类的对象转换为更具体的对象,因为内存中没有与子类的特定部分相关的对象数据。假设你有一个 A 类,它有一个字段 fA。当您实例化该类的对象时,该字段将被初始化并在内存中占据一些位置。现在您通过添加字段 fB 将类 A 扩展到 B。您创建了一个在内存中分配 fA 和 fB 的对象。
A aObj = new B(); 是正确的转换,因为 A 知道 aF,一旦您访问 fA,它就会在内存中找到该字段;
B bObj = new A(); 这是因为引用 bF 不会成功(A 的实例化没有在内存中分配 fB)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句