如何获取对象父级的实例

时间:2010-10-11 19:19:21

标签: java oop parent-child

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 个答案:

答案 0 :(得分:4)

没有内置方法可以做到这一点。你当然可以编写一个方法来获取Foo并创建一个已经用相关属性初始化的Bar。

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

另一方面,继承意味着Foo Bar,所以你可以这样做

 public Bar getBar() {
      return this;
   }

答案 1 :(得分:0)

长话短说:

return this;

如果要返回副本,请在Bar上创建一个接收另一个Bar的复制构造函数。

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

答案 2 :(得分:0)

这是一个bar的实例,简单的事就是“返回这个”;但如果你需要一个独特的对象,也许你可以实现java.lang.Clonable并“return this.clone();”

答案 3 :(得分:0)

如果你的类扩展了Bar,它就是Bar本身的一个实例。所以

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

应该这样做。 如果您想要“不同的实例”,可以尝试:

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

答案 4 :(得分:0)

由于Foo 是-a 栏,您可以这样做:

return this;

这只会返回当前对象的父实例。

答案 5 :(得分:0)

您可以使用反射

    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();
        }
    }
相关问题