下面类的输出是什么?必须说出为什么会是这个结果!class People extends Try{
public void test(){
System.out.println("People Test!");
}

public People(){
}
 
}public  class  Try{         
   
   public void test(){
   System.out.println("Try Test!");
   };
  
   public Try(){
   test();
   }
   
    public static void main(String[] arg){
    new People(); 
    }

解决方案 »

  1.   

    People Test!
    又是这种问题...
    new People()先调用基类构造函数...
    基类构造函数调用test()
    由于动态绑定,而且实际类型是People
    所以调用了People的test()....
      

  2.   

    应该 输出 
    People Test!   
    不知道是这样嘛..我还是一个初学者..
    我是这样理解的:
    首先 只 new 了People;没有调用任何方法和属性,这种情况下系统只会自动调用构造方法,
    按照JAVA的规定父类的构造方法 总会比 子类的构造方法先被运行,所以这里 会自动运行
    父类的public Try(){
       test();
       }
    构造方法,而子类的构造方法为空方法,父类的构造方法的作用是调用test();这个行为,不注意会以为 结果是输出Try Test!
    但是,仔细发现子类已经重写了这个方法,按照JAVA的规定:从子类中调用重写方法时,将总是调用出现在子类中的方法,所以最后的结果是:People Test!由于我还是 新人..解释得语言 不流利...  不知道  是否正确    共同学习...不求给分
      

  3.   

    People Test!
    由main()出发 new People() 应该调用People()构造方法 , 但是People继承了Try类  调用子类构造方法之前要调用父类的构造方法 Try() ,在其内部调用text()方法 ,这是父类的text()方法已经被子类的同名方法覆盖,所以调用的是子类的text()方法 (再调用People的构造方法  没有任何动作) 输出结果。
      

  4.   

    People Test!
    这个真得是我的面试题 我写错了 哭~
      

  5.   

    kljdsklajldfks jflk;dsjflk;ajd ,xvs;akljf;dsjfla;dsjlkfjasdfsda
      

  6.   

    结果是,People Test!原因是,调用test()的时候,实际上是this.test(),而目前产生的对象是People对象,因此this指向People对象,this.test()实际上调用People类的test()。
      

  7.   

    就是动太绑定,看看JAVA编程思想关于这方面的介绍就清楚了
      

  8.   

    当然是 People Test!调用基类的构造函数