1
oldshensheep 2021-04-22 22:17:09 +08:00 1
不是很明白问题是什么意思,子类构造函数如果没有用 super,那就是调用父类的无参构造函数。
如果你父类写了构造函数,就不会自动生成无参构造函数了。 |
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 } 有请下一位同学告诉楼主为什么 |
3
Rocketer 2021-04-23 01:02:12 +08:00 via iPhone
第一位同学的最后一句已经回答过为什么了
|
4
passerbytiny 2021-04-23 09:36:05 +08:00 via Android
一、Java 的类加载机制是,必须先构造基类再构造子类,所以构造器第一句必定是 super() 或 super(args... ) ,你要自己没写编译器就给你自动加上 suoer() 。
二、只在你没定义构造器的时候才自动添加无参构造器——如果你只添加了带参构造器,通常表示你不允许无参构造而只允许带参构造,这时候编译器是不能自作聪明给加上无参构造的。 以上两点造成了,如果基类定义了无参构造器并且未添加无参构造,那么子类的构造器都得明确调用 super(args...) 。上述情况不表示你必须为类添加一个无参构造,因为上述情况在某些场景下是正确而非错误情况。 |
6
ESP OP @oldshensheep 感谢回复。如果子类构造函数没有用 super,既然编译器会为父类自动添加无参构造函数,那为什么父类还要显式地提供无参构造函数呢?
|
7
ESP OP @passerbytiny 感谢解答
|
8
neptuno 2021-06-11 15:30:39 +08:00
父类不需要显式提供无参构造函数呀,不定义任何构造函数的时候,编译器会给你加上无参构造函数;如果你提供了某个构造函数,编译器不会给你加无参构造函数;
|