由于不太了解JAVA 冒昧问一下
判断以下JAVA代码Teacher类的main方法的运行结果public class Teacher extends Person {
public Teacher () { super(); }
public Teacher(int a) { System.out.println (a); }
    public void func() { System.out.print ("2, "); }
public static void main(String[] args) { 
Teacher t 1 = new Teacher (); 
Teacher t2 = new Teacher(3);
}
}
class Person {
    public Person () { func(); }
    public void func() { System.out.println("1, "); }
}

解决方案 »

  1.   

    依次new了Teacher类的两个重载构造方法(构造子类时连带会先构造父类)第一个最后调用到func() 因为子类覆盖了 所以调用子类的
    第二个首先运行父类默认构造函数,然后直接调用构造函数的单参重载版本所以最后输出 2, 2, 3
      

  2.   


    public class Teacher extends Person { 
      public Teacher(){
        super();   // 1
      } 
      public Teacher(int a){
        super();   //2
        System.out.println(a); //3  
      } 

      public void func(){
        System.out.print("2,   ");//4  
      } 
      public static void main(String[] args){   
        Teacher t1 = new Teacher(); //5  
        Teacher t2 = new Teacher(3); //6
      } 

    class Person {
      public Person(){
        func();//7
      } 
      public void func(){
        System.out.println("1,   ");//8
      } 
    }
    执行顺序:
    -->5-->1-->7-->4;
    -->6-->2-->7-->4-->3;
    说明:
    1,子类方法会覆盖掉父类中的非private修饰的同名同参数的方法;
       因此,这里的父类func()被覆盖,不可能执行代码8;
    2,子类构造方法初始化时,如果不指定父类构造方法,那么默认使用不带参数的构造方法,即super();
       因此,super()可以省略不写;