【问题标题】:Is there a super() in Object class also,if so where does it poin?Object 类中是否也有 super(),如果有,它指向哪里?
【发布时间】:2012-02-06 20:13:48
【问题描述】:

super() 隐式放置在每个构造函数中,以便它获取父类中提到的方法。层次结构中最高的类是Object

问题是Object 类的super() 指向哪里?

【问题讨论】:

    标签: java core


    【解决方案1】:

    你可能会觉得这很有趣。

    System.out.println("System.class.getSuperclass()= "+System.class.getSuperclass());
    System.out.println("Object.class.getSuperclass()= "+Object.class.getSuperclass());
    

    打印

    System.class.getSuperclass()= class java.lang.Object
    Object.class.getSuperclass()= null
    

    【讨论】:

      【解决方案2】:

      查看source code for Object很有启发性

      如您所见,它没有基类(请注意,隐含的基类是Object,但在这种情况下怎么可能呢?)

      正如代码 cmets 中所述,它是 Java 层次结构的根。因此,这是一种特殊情况,没有超类调用。

      【讨论】:

        【解决方案3】:

        Object 类不能有 super(),它是类层次结构中的最高项。它下面的所有东西都会有一个 super() 但不是 Object。

        【讨论】:

          【解决方案4】:

          见 JLS 的12.5 Creation of New Class Instances

          如果此构造函数用于Object 以外的类,则此构造函数将以显式或隐式调用超类构造函数开始(使用super)。

          【讨论】:

            【解决方案5】:

            Object 中不会有 super。

            【讨论】:

              【解决方案6】:

              对象类是java中所有类的基础,所以不会在对象类的构造函数中调用super()。

              它没有被任何类扩展,因此很明显它没有在其构造函数中调用 super。

              【讨论】:

                【解决方案7】:

                当链条停在 Object 处时想一想。

                喜欢 A -> super() -> B->super() -> 停止

                【讨论】:

                  【解决方案8】:

                  您可以通过编写两个类并从另一个类扩展一个类来检查这一点

                  例如:

                  将 A 类创建为:

                  class A{
                  
                     int a, b;
                  
                     A(int a, int b){
                     }
                  
                  }
                  

                  创建扩展类 A 的类 B:

                  class B extends A{
                      public static void main(String a[]){
                          B b = new B();
                      } 
                  }
                  

                  当你尝试创建 B 类的对象时会出错,因为 B 类默认构造函数被调用,而 intrun 调用超类“A”的默认构造函数,但 A 类没有任何默认值或零参数构造函数。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-10-29
                    • 2015-07-26
                    • 2018-09-18
                    • 2013-04-19
                    • 1970-01-01
                    • 2015-06-11
                    • 2011-04-09
                    相关资源
                    最近更新 更多