在java中,用户可以重载类的默认构造函数,这是真的还是假的?

问题描述 投票:-1回答:1

对于下面的代码,我能够重载默认构造函数,但根据书中的JAVA OCA SE 8 by mala gupta,这句话是假的,它说我们不能重载一个默认构造函数,有什么想法?

package com.sandy.OCA_prep;


class App
{
    static
    {
        System.out.println("inside static block");
    }
    App(int a)
    {
        System.out.println("inside the integer overloaded constructor");
    }
    public static void main( String[] args )
    {  
      System.out.println("hello world");


      App app2=new App(5);

    }
}

java constructor overloading default-constructor
1个回答
1
投票

"重载默认构造函数 "这句话是没有道理的。

  • 重载指的是有多个名称相同但参数列表不同的方法。
  • 缺省构造函数是指如果你不指定任何其他构造函数,编译器就会为你生成的无参数构造函数。它的定义是没有参数的。
  • 由于重载需要不同的参数列表,而缺省构造函数根据定义只有一个可能的参数列表(空的那个),所以这两个概念没有意义上的交互。

你可以 指定自己的无参数构造函数 从而阻止编译器生成默认构造函数,但我不会把这称为 "重载默认构造函数"。


1
投票

这是一个棘手的问题。根据定义,默认构造函数是指当你没有包含一个构造函数时,由编译器提供的构造函数。假设你写了一个类,然后编译它。在生成的.class文件中,你会看到有一个no-args构造函数,即使你没有在代码中包含一个。这就是默认的构造函数。然而,当你写你自己的构造函数时,默认的构造函数将不会被编译器插入。记住,你写的no-args构造函数不被认为是默认构造函数.所以,从技术上讲,默认构造函数永远不能被重载。


0
投票

我能够重载缺省构造函数。

不,你没有。这里没有重载。重载指的是有两个或多个相同的方法可以通过不同的参数列表来区分。

通过声明你自己的构造函数,默认的构造函数--如果你不声明你自己的构造函数,就会使用隐式构造函数--不会被应用。

© www.soinside.com 2019 - 2024. All rights reserved.