前段时间在学习中遇到一个问题:

对代码进一步修改后发现:


原因:父类中由于已经显式定义了一个有参构造方法故编译器不再给予无参构造方法,而继承类中的构造方法也没有明确指出实现哪一个父类构造方法,故编译器给予继承类构造方法一个super()(隐式表达),但父类中很明显没有无参构造方法,故报错。
顺带再总结一下知识点:
1.对于一个继承类来说,其构造方法内部至少要实现一个父类的构造方法(至少有一个继承类构造方法去实现任何一个父类构造方法就可以)。
2.如果继承类中的构造方法(不管是有参还是无参)没有明确指定要实现的父类构造方法,则编译器将自动给予一个super()在继承类构造方法的内部,以实现父类的无参构造方法(该代码不会显式表达)。
3.在继承类的构造方法中,如明确指定了实现父类中的某一个构造函数,则该继承类构造方法不会再自动获得一个super()。
4.继承类中的非构造方法不能实现父类构造方法,也不会自动获得一个super(),故无论父类的构造方法是什么也不会对它产生影响。
5.父类如果没有明确编写一个或多个构造方法,则编译器自动给予父类一个无参构造方法,当有明确编写一个或多个构造方法,则不会自动给予。
总之,在平时编写程序时最好显式编写一个父类的无参构造方法,可以避免如上状况发生。
本文探讨了Java中继承类与父类构造方法的关系。当父类有显式定义的构造方法时,编译器不再提供无参构造方法。在继承类中,如果构造方法未指定调用父类构造器,编译器会默认添加`super()`调用父类无参构造器,但如果父类无此构造器,会导致错误。因此,建议在父类中显式声明无参构造方法,以避免此类问题。同时,总结了构造方法与父类构造方法交互的几个关键点,强调了构造方法的正确使用对程序的重要性。

11万+





