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
}
}
答案 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();
}
}