Как получить экземпляр родительского объекта
Есть ли способ в Java, чтобы получить экземпляр родительского класса моего объекта из этого объекта?
ех.
public class Foo extends Bar {
public Bar getBar(){
// code to return an instance of Bar whose members have the same state as Foo's
}
}
6 ответов
Там нет встроенного способа сделать это. Вы, конечно, можете написать метод, который возьмет Foo и создаст Bar, который был инициализирован с соответствующими свойствами.
public Bar getBar() {
Bar bar = new Bar();
bar.setPropOne(this.getPropOne());
bar.setPropTwo(this.getPropTwo());
return bar;
}
С другой стороны, наследование означает, что Foo - это бар, так что вы можете просто сделать
public Bar getBar() {
return this;
}
Поскольку Foo is-a Bar, вы можете сделать это:
return this;
Это вернет только родительский экземпляр текущего объекта.
Если ваш класс расширяет Bar, это экземпляр самого Bar. Так
public Bar getBar() {
return (Bar) this;
}
должен сделать это. Если вы хотите "другой экземпляр", вы можете попробовать:
public Bar getBar() {
return (Bar) this.clone();
}
Вы можете использовать отражение
package com;
class Bar {
public void whoAreYou(){
System.out.println("I'm Bar");
}
}
public class Foo extends Bar{
public void whoAreYou() {
System.out.println("I'm Foo");
}
public Bar getBar() {
try {
return (Bar)this.getClass().getSuperclass().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
throw new RuntimeException();
}
public static void main() {
Foo foo = new Foo();
foo.whoAreYou();
foo.getBar().whoAreYou();
}
}
Это экземпляр бара, простая вещь просто "вернуть это"; но если вам нужен отдельный объект, возможно, вы могли бы реализовать java.lang.Clonable и "return this.clone();"
Короче:
return this;
Если вы хотите вернуть копию, то создайте конструктор копирования для Bar, который получает другой Bar.
public Bar(Bar that) {
this.a = that.a;
this.b = that.b;
...
}