【问题标题】:Java - get parent object from child object [closed]Java - 从子对象获取父对象[关闭]
【发布时间】:2014-11-13 03:04:04
【问题描述】:

我正在尝试从父对象获取基础对象,但我无法做到。 我们有这样的东西吗?`

public class A
{
}

public class B extends A
{
    A obj = this.getParentObject();     
}

谢谢 法赫德·穆拉吉

【问题讨论】:

  • docs.oracle.com/javase/tutorial/java/IandI/super.html 尽管您现在尝试做的事情看起来相当老套。子类不应该持有对基类的引用,这甚至没有意义。
  • 我的 A 类是休眠中的实体类。我不想在我的实体类中编写任何函数,但我想在子类中插入实体对象。
  • 没有父对象这样的东西。 Java 使用基于类的继承。
  • 如果你有B b = new B();,你可以通过默认的 Java 提供的转换获得父 A。 A a = (A)b 这是自动的,所以只写A a = b 会得到相同的结果。

标签: java oop inheritance


【解决方案1】:

您应该阅读 super 关键字和 inheritance 在 Java 中的工作原理。

获取超类,或者你的类扩展的类,在一般情况下并不是真正需要的。见下图:

public class A {

    protected int value;

    public A() {
        this.value = 2;
    }

}

public class B extends A {

    public B() {
        System.out.println(value); // prints 2
    }

}

要引用超类,请使用 super 关键字。请参见下面的示例:

public class A {

    public void doStuff() {
        System.out.println("parent");
    }

}

public class B extends A {

    public B() {
        doStuff(); // prints "child"
        super.doStuff(); // prints "parent"
    }

    @Override
    public void doStuff() {
        System.out.println("child");
    }

}

我希望这能回答你的问题。


陈词滥调且通常不必要的东西

当然,您可以获取父对象。为此,我建议为返回自身的类 A 创建一个受保护(或公共)方法。请参阅下面的代码示例:

public class A {

    protected A getMe() {
        return this;
    }

}

public class B extends A {

    public B() {
        A superInstance = getMe();
    }

}

这是未经测试的代码,但我不明白为什么它不起作用。

【讨论】:

  • 当然这最后的想法是不正确的。在从 B 的构造函数调用的方法 getMe() 中,this 指的是正在创建的 B 实例。不适用于任何 A 实例。
【解决方案2】:

没有这样的事情。您从扩展 A 的类 B 中实例化一个对象。它只是一个对象,其中不“包含”A。假设 A 还有其他属性:

public class A
{
  public int a;
}

public class B extends A
{
  public int b;
}

来自 B 类的对象将同时具有属性 a 和 b。

使用“super”关键字,您可以访问基类中的方法。但是你不能从基类中“获取对象”。

【讨论】:

    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 2020-04-14
    • 2022-01-04
    • 2010-10-12
    • 2021-01-25
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多