答案是:java中子类是不会继承父类的构造函数但是可以调用
父类 Animal:
package encryption;
public class Animal {
private String name = "animal";
public Animal() {
System.out.println(".....this is Animal.");
}
public Animal(String name) {
this.name = name;
}
public void printName() {
System.out.println(this.getClass().getName() + ":" + this.name);
}
}
子类 Dog:
package encryption;
public class Dog extends Animal {
}
主类 Animal_Test:
package encryption;
public class Animal_Test {
public static void main(String[] args) {
Animal t = new Animal();
Dog t1 = new Dog();
}
}
第一次运行结果:
这时构造方法打印的.....this is Animal.
这时构造方法打印的.....this is Animal.
修改子类,给子类添加一个显式的无参构造:
package encryption;
public class Dog extends Animal {
//Dog()无参构造方法
public Dog() {
}
}
这时构造方法打印的.....this is Animal.
这时构造方法打印的.....this is Animal.
package encryption;
public class Dog extends Animal {
//Dog()无参构造方法
public Dog() {
super(); //显式调用父类无参构造方法
}
}
这时构造方法打印的.....this is Animal.
这时构造方法打印的.....this is Animal.
总结:
从运行结果中可以看出,三次运行的结果都是一致的可以得出以下结论:
1、第一次结果和第二次结果对比,说明当子类没有显式的写出无参构造方法,系统是默认给子类添加一个无参构造方法的;
2、第二次结果和第三次结果对比,说明子类是隐式的在子类无参构造方法中调用super()的,即隐式调用父类无参构造方法的;
3、综合三次结果得出结论,子类不是继承父类的构造方法而是可以隐式的调用父类无参构造方法的;是调用而不是继承;