首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >派生类类变量的初始化/实例化顺序和基类构造函数的调用

派生类类变量的初始化/实例化顺序和基类构造函数的调用
EN

Stack Overflow用户
提问于 2015-09-09 23:30:34
回答 2查看 1.7K关注 0票数 1

我想找出1)派生类变量的初始化/实例的顺序,2)在这个代码片段中调用基类构造函数。

代码语言:javascript
复制
public class base 
{
  int y = 1;
  public base()
  { 
      y = 2; 
      function();
  }
  void function () 
  {
     System.out.println("In base Value = " + String.valueOf(y));
  }

  public static class derived extends base 
  {
      int y = 3;
      public derived()
      { 
          function();
      }
      void function () 
      {
          System.out.println("In derived Value = " + String.valueOf(y));
      }
  }
  public static void main(String[] args) 
  { 
      base b = new base.derived();
      return;
  }
}

我的理解是,首先,派生类被初始化,然后调用基类构造函数,然后初始化派生类变量y。这个命令正确吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-09 23:36:59

执行顺序如下:

1)静态初始化器

基类实例化

2)实例初始化器

3)构造函数

4)主体的其余部分。

基类实例化之前的静态初始化程序。

如果有多个实例初始化器,则它们按照从上到下写入的顺序进行。

你的代码

您没有任何实例块。

父类构造函数首先运行,基类中的y变量设置为2,然后调用函数方法,但是函数方法在子类中被重写,因此使用子类方法。

但是,派生的.y变量尚未初始化,因此y的值默认为0。

在此之后,子类;派生的构造函数运行,派生.y的值声明为3,派生类中定义的覆盖函数方法运行,因此打印派生值为3。

注:这两个y变量并不相同。

票数 3
EN

Stack Overflow用户

发布于 2022-06-01 00:35:26

要添加到会话(这是在Kotlin中,它类似于Java),以下程序的输出

代码语言:javascript
复制
open class Base {

    val x = 1

    constructor() {
        println("x=$x")
        function()
    }

    open fun function() {

    }

    open class Derived1 : Base {

        val y = 2

        constructor() {
            println("y=$y")
            function()
        }

        override fun function() {
            println("In derived Value = $y")
        }
    }

    class Derived2 : Derived1 {

        var z = 3

        constructor() : super() {
            println("z=$z")
            function()
        }

        override fun function() {
            println("In derived Value = $z")
        }
    }
}

fun main(args: Array<String>) {
    val b: Base = Base.Derived2()
    return
}

代码语言:javascript
复制
x=1
In derived Value = 0
y=2
In derived Value = 0
z=3
In derived Value = 3

Process finished with exit code 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32490714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档