【问题标题】:Java-Where does the super class object go after creating sub class objectJava-创建子类对象后超类对象去哪了
【发布时间】:2017-11-30 10:04:07
【问题描述】:

当一个类扩展另一个类时,子类构造函数调用超类构造函数。

在这个过程中创建了两个对象,子类和超类。我的问题是这个超类对象在子类对象的整个生命周期中会发生什么?

由于引用属于子类,会被垃圾回收吗?

class A
{
    public A()
    {
        System.out.println("super class constructor");
    }
}

class B extends A
{
    public B()
    {
        //  super();  default added 
        System.out.println("sub class constructor");
    }
}

class Test
{
    public static void main(String[] args)
    {
        B ob=new B();
    }
}

【问题讨论】:

  • 这只是一个对象。这个对象是AB的实例,所以它需要运行A的初始化和B的初始化。
  • 在这个过程中创建了 2 个对象,子类和超类:不,根本没有。正在创建一个对象。
  • 别忘了A也有一个超类java.lang.Object(实际上Object是所有引用类型的超类)。
  • 提示:你的标签是假的。你有一个简单的 Java 问题;绝对没有需要为 java8 或 java6 标记它。
  • @erwin 不,不是在 Java 中。

标签: java


【解决方案1】:

错误的假设。

恰好一个对象被创建。是的,将会发生多个构造函数调用(请参阅here 了解究竟发生了什么)。

但从一开始就;直到最后,new 返回那个新创建的对象:只有一个对象存在!

【讨论】:

  • 没有。我与 Erwin 交谈过,他现在删除了他的评论。
【解决方案2】:

在这个过程中创建了2个对象,子类和超类 类。

不,创建了一个对象:结构也依赖于超类的子类的实例。

调用超类的构造函数是Java语言规范的要求。它允许保持一致性,因为子类应该依赖其父类的构造规则。

【讨论】:

  • 总是第一个到达还不够:)
【解决方案3】:

在这个过程中创建了2个对象,子类和超类。

不,只创建一个对象 - 子类的对象。由于子类-超类关系称为“is-a”,子类也是超类

这就是为什么可以在子类上调用超类方法的原因,只要方法是可见的。这也是为什么超类的构造函数与子类的对象一起工作的原因。

【讨论】:

    【解决方案4】:

    我认为只有一个对象,由它的构造函数和超构造函数构成。对象ob会继承类B和超类A的所有属性,比如A的构造函数初始化变量,也会为对象ob初始化。

    【讨论】:

      【解决方案5】:

      只会创建 一个 对象。因此,两个构造函数中的代码都将被执行。子类有机会覆盖其父类的已定义行为。

      一个例子会有所帮助。想象一个类Human和一个子类Bob

      class Human
      class Bob extends Human
      

      使用Bob bob = new Bob() 创建 Bob 时,您只会创建一个也是 human 的 Bob 实例。所以bob instanceOf Human 将是true。 由于Bobhuman,因此他和Humans 构造函数的代码都被执行,并且他还从Human 获取所有方法。

      通过使用super,您不会引用父实例,而是引用那里声明的代码。想象一下Human 有一个方法isAliveBob 覆盖了这个方法(他希望永远活着)。 但是,您还希望能够显式调用在Human 类中声明的isAlive 方法,尽管Bob 覆盖了它。您通过super.isAlive() 执行此操作。 Java 知道啊,他想要来自 Human 而不是 Bob 的方法

      【讨论】:

        【解决方案6】:

        只有一个对象。调用 super() 来继承父级的行为。这就是为什么我们可以在子类中获取父类的属性。

        【讨论】:

          猜你喜欢
          • 2010-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多