Как получить экземпляр родительского объекта - PullRequest
1 голос
/ 11 октября 2010

Есть ли в Java способ получить экземпляр родительского класса моего объекта из этого объекта?

ex.

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 ]

4 голосов
/ 11 октября 2010

Нет встроенного способа сделать это.Вы, конечно, можете написать метод, который возьмет Foo и создаст Bar, который был инициализирован с соответствующими свойствами.

  public Bar getBar() {
       Bar bar = new Bar();
       bar.setPropOne(this.getPropOne());
       bar.setPropTwo(this.getPropTwo());
       return bar;
  }

С другой стороны, наследование означает, что Foo является1005 * Бар, так что вы можете просто сделать

 public Bar getBar() {
      return this;
   }
0 голосов
/ 12 октября 2010

Вы можете использовать отражение

    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();
        }
    }
0 голосов
/ 11 октября 2010

Поскольку Foo is-a Bar, вы можете сделать это:

return this;

Это вернет только родительский экземпляр текущего объекта.

0 голосов
/ 11 октября 2010

Если ваш класс расширяет Bar, это экземпляр самого Bar.Так что

public Bar getBar() {
  return (Bar) this;
}

должно это сделать.Если вы хотите «другой экземпляр», вы можете попробовать:

public Bar getBar() {
   return (Bar) this.clone();
}
0 голосов
/ 11 октября 2010

это экземпляр bar, простая вещь просто "вернуть это"; но если вам нужен отдельный объект, возможно, вы могли бы реализовать java.lang.Clonable и «return this.clone ();»

0 голосов
/ 11 октября 2010

Короче говоря:

return this;

Если вы хотите вернуть копию, то создайте конструктор копирования в Bar, который получает другой Bar.

public Bar(Bar that) {
    this.a = that.a;
    this.b = that.b;
    ...
}
...