我有一个来自图书馆的图像类,我正在尝试扩展。在某些情况下,父类(super class)方法会返回新的父类(super class)对象。如何在父类(super class)方法返回的对象上使用子类方法?有没有办法将父类(super class)对象更改为子类对象?
public class LibraryClass extends SomeBaseClass {
LibraryClass someMethodThatChangesDataReturningNewObject() {
}
}
public class MyClass extends LibraryClass {
// methods that extends functionality
// possible to override superclass method calling it and turning the LibraryClass
// obj into a MyClass obj and return that?
}
someRandomMethod() {
MyClass obj = new MyClass;
LibraryClass newObj = obj.someMethodThatChangesDataReturningNewObject();
// possible to bind my subclass methods to newObj?
}
最佳答案
好吧,你可以这样做:
MyClass obj = new MyClass();
MyClass newObj = (MyClass) obj.someMethodThatChangesDataReturningNewObject();
您只需要确保您的 MyClass.someMethodThatChangesDataReturningNewObject()
实现确实返回 MyClass
的实例。如果该方法的实现仅调用父实现,那么将转换包装在 if 语句中会更安全,如下所示:
MyClass obj = new MyClass();
LibraryClass newLibraryClass = obj.someMethodThatChangesDataReturningNewObject();
if (newLibraryClass instanceof MyClass) {
MyClass newObj = (MyClass) newLibraryClass;
// MyClass specific processing here
}
在这种情况下,如果对象不是 MyClass
的实例,您将不会得到 ClassCastException
。请记住,如果它不是 MyClass
的实例,则不会执行该处理。
唯一的其他方法是创建一个构造函数或其他实用方法,可以使用 LibraryClass
中的数据创建新的 MyClass
实例。这可能可行,也可能不可能,具体取决于 LibraryClass
中的字段或 getter/setter 是私有(private)的还是 protected /公共(public)的。在不了解 LibraryClass
的任何细节的情况下,很难说。但我希望它看起来类似于:
MyClass(LibraryClass libraryClass) {
this.setField1(libraryClass.getField1());
this.setField2(libraryClass.getField2());
...
}
关于java - 有没有办法将父类(super class) obj 更改为子类 obj?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21058692/