【问题标题】:Compile time error and Constructor "Super" [closed]编译时错误和构造函数“超级”[关闭]
【发布时间】:2014-05-16 03:55:22
【问题描述】:

只是一个简单的问题,我希望有人能给出解释。

当类的构造函数没有使用“super”显式调用其超类的构造函数时会发生什么。同样,哪些情况会导致编译时错误?提前致谢!

【问题讨论】:

    标签: java inheritance constructor


    【解决方案1】:

    如果存在,它会隐式调用超类的默认构造函数,否则会导致编译器错误

    【讨论】:

      【解决方案2】:

      当类的构造函数没有使用“super”显式调用其superclass 的构造函数时。

      子类中的 constrcutor 将具有 default callno arg default constrcutorsuper 类。

      因此它调用super class no arg default constructor.

      如果super类没有no arg default constructor那么肯定会抛出编译时错误。

      让我们看看场景

      class A{
      
      }
      
      class B extends A{
      
      }
      

      这在内部变成了

      class A{
      A(){
      }
      
      }
      
      class B extends A{
      B(){
      super();
      }
      }
      

      作为 A 类中存在的默认构造函数,这绝对不会出错。

      现在如果 A 没有默认构造函数(在我们编写自己的构造函数时发生)

      class A{
      A(int a){
      
      }
      
      }
      
      class B extends A{
      
      }
      

      这将在内部拥有

      class A{
      A(int a){
      
      }
      
      }
      
      class B extends A{
      B(){
      super();//compile time error as no default constructor in class A
      }
      }
      

      解决方案

      1) 在 A 类中明确定义任一默认构造函数

      2) 从 B 中调用 A 的参数化构造函数,例如 int x =0; super(x); 明确

      【讨论】:

        猜你喜欢
        • 2021-11-15
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        相关资源
        最近更新 更多