java中子类继承父类的构造方法吗?
看java2实用教程上写的 子类不能继承父类的构造方法
百度了一下,有人说能继承,也有人说不继承
自己写了一段试了一下
class A {
A() {
System.out.println("调用了");
}
}
class B extends A {
B(){
System.out.println("no");
}
}
public class E {
public static void main(String[] args) {
B b = new B(); //OK
}
}
run:
调用了
no
这算调用了吗,到底怎么回事?能不能具体讲讲,谢谢了
------解决方案--------------------继承问题,子类实例化生成对象时,把这个类加载到JVM上,会先生成类的实例,但是new关键字有一个特殊的性质就是会先调用类的无参构造方法,如果这个类继承了父类,则子类实例化时,会先调用父类的无参构造方法,因此在这儿B b = new B()的过程中,会先调用A类的无参构造方法
------解决方案--------------------首先,方法是没有继承一说的,只有覆写或者重载,类和类之间才能叫继承。
其次,你所出现的效果,是类的一个初始化的顺序问题,子类在初始化的时候会先调用父类的构造方法,所以打出了你的那句话。
最后,子类可以使用super()显示调用父构造器,没有重写的必要。
------解决方案--------------------子类不会继承父类的构造方法,但是子类在实例化对象时:如果子类的构造器没有显示的调用超类的方法,则将自动调用超类默认构造器。如果超类没有不带参数的构造器,且子类的构造器中又没显示的调用超类其他构造器,则Java编译器将报告错误(java核心技术P146)。