package shuren.ren;
//class Teacher
class Teacher
{
    public Teacher()
    {
        System.out.println("父类无参构造");
    } 
    public Teacher (String str)
    {
        System.out.println(str);
    }
}
//class Student
class Student extends Teacher
{
    public Student()
    {
        System.out.println("子类无参构造");
    } 
    public Student (String str)  //这里是调用的口子,但为什么去调用父类型.要调用也
    {                            //应该调用父类的有参构造才对!!
        System.out.println(str);
    }
}
//主class
class Srmethod
{
    public static void main(String args[])
    {
        Student objs2=new Student("子类带一个参数的构造方法");
    }
}结果:
--------------------Configuration: dd - JDK version 1.6.0 <Default> - <Default>--------------------
父类无参构造
子类带一个参数的构造方法Process completed.

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-03 14:30:07的历史汇总数据(不包括此帖):
    发帖的总数量:193                      发帖的总分数:8922                     
    结贴的总数量:192                      结贴的总分数:8897                     
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:1                        未结的总分数:25                       
    结贴的百分比:99.48 %               结分的百分比:99.72 %                  
    无满意结贴率:1.04  %               无满意结分率:0.56  %                  
    值得尊敬
      

  2.   

    结果: 
    --------------------Configuration: dd - JDK version 1.6.0 <Default> - <Default>-------------------- 
    父类无参构造 
    子类带一个参数的构造方法 Process completed. 这个结果应该是对的哦!!因为,Teacher类的构造方法!有两个构造方法,但是你的student 类没有 显示调用,所以就要调用 Teacher()的构造方法,而不是掉用 Teacher(String str) 的构造方法哦,但是  main 函数里面 的就是 显示 的调用了
     Students 里面的 Student (String str) 的方法,所以要输出 子类带一个参数的构造方法  但是 要先输出父类的方法东西,才能输出子类的!!个人想法,
      

  3.   

    子类构造方法如没有显示调用父类构造方法super(参数),则自动调用无参数的构造方法
    如果父类没有无参数的构造方法,则会提示错误。。
    在你没写构造方法的类里,系统自动提供无参数的构造方法。
      

  4.   

    下边的代码是错的.package shuren.ren;
    //class Teacher
    class Teacher
    {
         public Teacher (String str)
        {
            System.out.println(str);
        }
    }
    //class Student
    class Student extends Teacher
    {
        public Student()
        {
            System.out.println("子类无参构造");
        } 
        public Student (String str)  //这里是调用的口子,但为什么去调用父类型.要调用也
        {                            //应该调用父类的有参构造才对!!
            System.out.println(str);
        }
    }
    //主class
    class Srmethod
    {
        public static void main(String args[])
        {
            Student objs2=new Student("子类带一个参数的构造方法");
        }
    }
      

  5.   

    类的初始化过程:
    1、分配空间;
    2、初始化变量;
    3、递归调用父类的无参构造方法;
    4、掉用本类的构造方法;如果你明白了这个过程,你就会明白:为什么输出是那个样子了。补充:
    类B要继承一个类A,则类A必须有一个无参构造函数。
    java虚拟机会为未定义构造函数的类提供一个默认的无参构造函数;
    但是,如果你为某个类C写了任何一个构造函数(有参或无参),java虚拟机就不会为类C提供默认构造函数了。因此,如果你的类A写了个有参构造函数,又想写一个类B继承类A,那么,你必须为类A再添加一个无参构造函数。若想调父类的有参构造方法,需要在构造函数里第一行显式调用super(参数列表...);
      

  6.   

        public Student (String str)  //这里是调用的口子,但为什么去调用父类型.要调用也
        {                            //应该调用父类的有参构造才对!!
            System.out.println(str);
        }
    子类中无论用哪个构造方法初始化对象其父类构造方法都要被调用到,否则父类定义的私有实例域就没法初始化了,所以你的构造方法中第一句如果既没写 this()(通过本类其它构造方法间接调用父类构造方法)又没写 super()(自己直接调用父类构造方法),那么在编译时编译器会帮你加上一句 super(); 到你构造方法的第一行。
      

  7.   

    默认调用父类无参构造函数,除非你显示调用super(XX)