黑马程序员技术交流社区

标题: 下面程序的输出结果为什么会是2,2,3而不是1,3? [打印本页]

作者: 李高翔    时间: 2011-11-16 13:10
标题: 下面程序的输出结果为什么会是2,2,3而不是1,3?
class Teacher extends Person {   
        public Teacher() {   
                super();   
       }   
        public Teacher(int a) {   
               System.out.print(a);   
      }   
         public void func() {   
             System.out.print("2,");   
      }   
       public static void main(String[] args) {   
              Teacher t1 = new Teacher();   
             Teacher t2 = new Teacher(3);   
      }   

  class Person {   
       public Person() {   
            func();   
          }   
        public void func() {   
             System.out.print("1,");   
       }   
}  

作者: 葛雨龙    时间: 2011-11-16 13:35
func  已经被重写了,虽然去找父类的构造方法,但是父类要调用的func已经被重写了,那么必然用子类的  自然第一个是2   第2个是23
作者: 齐国峰    时间: 2011-11-16 13:46
本帖最后由 齐国峰 于 2011-11-16 13:47 编辑

支持楼上第一个是被子类重写了,
第二个2好像是因为
         public Teacher(int a) {   
               System.out.print(a);   
       }  
这个好像会等价于
      public Teacher(int a) {
                this();
               System.out.print(a);   
       }  
作者: 吉许    时间: 2011-11-16 16:08
你这要考查的是继承和函数的重载.
具体就是被依赖的先构造,依赖于人的后构造.跨层依赖优先于同层依赖构造
作者: xiwangliujiao    时间: 2011-11-16 23:37
前两个是2是因为在调用无参构造方法时,先去调用父类的构造方法,而父类构造方法中调用的方法在子类中重写了,所以调用子类的方法,然后又回来调用子类的构造方法,依次递归,
输出3是调用teacher的有参的构造方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2