[疑问] 既然编译器会为自动为类添加无参构造函数,那么为什么父类还需要一个无参构造方法以供子类调用?(如果子类没有使用 super 调用) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ESP
V2EX    Java

[疑问] 既然编译器会为自动为类添加无参构造函数,那么为什么父类还需要一个无参构造方法以供子类调用?(如果子类没有使用 super 调用)

  •  
  •   ESP 2021-04-22 21:32:45 +08:00 2524 次点击
    这是一个创建于 1679 天前的主题,其中的信息可能已经有所发展或是发生改变。
    The title says it all.
    8 条回复    2021-06-11 15:30:39 +08:00
    oldshensheep
        1
    oldshensheep  
       2021-04-22 22:17:09 +08:00   1
    不是很明白问题是什么意思,子类构造函数如果没有用 super,那就是调用父类的无参构造函数。
    如果你父类写了构造函数,就不会自动生成无参构造函数了。
    Kasumi20
        2
    Kasumi20  
       2021-04-22 22:59:53 +08:00
    我虽然同样读不懂楼主在说什么。
    但是。
    我猜。
    他是说:
    7 class CC {
    8 public CC() {} <----------------- 此处必须显式提供该构造方法
    9 public CC(int a) {}
    10 }
    11
    12 class BB extends CC {
    13 public BB() {
    14 System.out.println("OK");
    15 }
    16 }

    有请下一位同学告诉楼主为什么
    Rocketer
        3
    Rocketer  
       2021-04-23 01:02:12 +08:00 via iPhone
    第一位同学的最后一句已经回答过为什么了
    passerbytiny
        4
    passerbytiny  
       2021-04-23 09:36:05 +08:00 via Android
    一、Java 的类加载机制是,必须先构造基类再构造子类,所以构造器第一句必定是 super() 或 super(args... ) ,你要自己没写编译器就给你自动加上 suoer() 。
    二、只在你没定义构造器的时候才自动添加无参构造器如果你只添加了带参构造器,通常表示你不允许无参构造而只允许带参构造,这时候编译器是不能自作聪明给加上无参构造的。

    以上两点造成了,如果基类定义了无参构造器并且未添加无参构造,那么子类的构造器都得明确调用 super(args...) 。上述情况不表示你必须为类添加一个无参构造,因为上述情况在某些场景下是正确而非错误情况。
    ESP
        5
    ESP  
    OP
       2021-04-23 14:09:04 +08:00
    @Kasumi20 是这个意思,感谢回答
    ESP
        6
    ESP  
    OP
       2021-04-23 14:10:48 +08:00
    @oldshensheep 感谢回复。如果子类构造函数没有用 super,既然编译器会为父类自动添加无参构造函数,那为什么父类还要显式地提供无参构造函数呢?
    ESP
        7
    ESP  
    OP
       2021-04-23 14:20:29 +08:00
    @passerbytiny 感谢解答
    neptuno
        8
    neptuno  
       2021-06-11 15:30:39 +08:00
    父类不需要显式提供无参构造函数呀,不定义任何构造函数的时候,编译器会给你加上无参构造函数;如果你提供了某个构造函数,编译器不会给你加无参构造函数;
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5648 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 01:50 PVG 09:50 LAX 17:50 JFK 20:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86