class SuperDemo{
private String name ;
public SuperDemo(){
System.out.println("超类的 无 参数的构造函数");
}

public SuperDemo(String name){
System.out.println("超类的 有 参数的构造函数");
}
}public class ExtendsContract extends SuperDemo {

public ExtendsContract(){
super();//调用的是有哪个?
System.out.println("子类 无 参数的构造函数 ");
} public ExtendsContract(String name){
//super();//调用哪个?
System.out.println("子类 有 参数的构造函数 ");
}

public static void main(String[] args) {
ExtendsContract ec1 = new ExtendsContract();
ExtendsContract ec2 = new ExtendsContract("Tom");

}}
输出结果很奇怪。可以把super()前面//去掉
但是输出结果也很奇怪

解决方案 »

  1.   

    你的super()总是无参的,所以总会调用父类的:
    public SuperDemo(){ 
    System.out.println("超类的 无 参数的构造函数"); 
    } 这个构造函数。
      

  2.   

    你多做几个实验就会理解的深刻一些!package com.lw.test;class SuperDemo {
    private String name; public SuperDemo() {
    System.out.println("超类的 无 参数的构造函数");
    } public SuperDemo(String name) {
    System.out.println("超类的 有 参数的构造函数");
    }
    }public class ExtendsContract extends SuperDemo { public ExtendsContract() {
    super();// 调用的是有哪个?
    System.out.println("子类 无 参数的构造函数 ");
    } public ExtendsContract(String name) {
                    //子类构造器会默认调用父类的无参构造器,如果父类没有无参构造器,子类构造器里必须显示的调用,否则编译出错。
    //super();//调用哪个?
                      //加这个你试试...会有新鲜感的!
    super(name);
    System.out.println("子类 有 参数的构造函数 ");
    } public static void main(String[] args) {
    ExtendsContract ec1 = new ExtendsContract();
    ExtendsContract ec2 = new ExtendsContract("Tom"); }}
      

  3.   

    如果把super()去掉后又是怎样呢
      

  4.   

    没有为什么,java就是这个机制。
      

  5.   


    同意,如果没有显示写super(),他会自动调用无参数的父类构造,如果调用super(a,b)会调用父类
    有相关参数的构造