[转]java中关于构造函数继承的一些问题1

系统 1593 0
java中的继承真的是一门相当复杂的学问啊,很多东西都那么诡异,有一些技巧更是只可意会不能言传的,那就让时间和经验来解决这些问题吧。总结了一些,慢慢消化。。。



class   tt  
  {  
  public   static   void   main(String[]   args){  
    Person   p=new   Graduate();  
    }  
    }  
    class   Person  
    {  
    String   name;  
    int   age;  
    Person(){System.out.println("In   Person()");}  
    Person(String   name,int   age){  
      this.name=name;  
      this.age=age;  
      System.out.println("In   Person(String,int)");  
      }  
      }  
      class   Student   extends   Person  
      {  
      String   school;  
      Student(){ 
      this(null,0,null);
      //对this的调用必须是构造函数的第一个语句 
      System.out.println("In   Student()");  
      }  
      Student(String   name,int   age,String   school){  
      super(name,age);  
      this.school=school;  
      System.out.println("In   student(String,int,string)");  
      }  
      }  
      class   Graduate   extends   Student  
      {  
      Graduate(){  
      System.out.println("In   Graduate()");  
      }  
      }  



输出结果:

In   Person(String,int)  
  In   student(String,int,string)  
  In   Student()  
  In   Graduate()  

相关解释:

1、

没有父,哪来子  
   
      Graduate(){     //自动调super();   如果父类有无参构造函数,否则要显式调用super(x,y,...)  
      System.out.println("In   Graduate()");  
      }  

2、

恩``建议楼主应该去看下think   in   java初始化那章```讲的很明白!  
   
  当调用子函数的构造函数的时候   ,他会依次调用最上层父类的构造函数,再依次往下层调用构造函数!  
   
  所以对你的例子来说   很明确:  
   
  首先编译器看到了graduate(),然后去找class   Graduate   父类是class   Student,这里编译器就会自动去调用Student(),但是Student()里面先要this(null,0,null);   所以去调用Student(String   name,int   age,String   school),他里面又要去super   (name,age);  
  所以最先完成最上层的构造函数的调用,完成person类的初始化动作,所以:In   Person(String,int)  
   
  然后   完成   Student(String   name,int   age,String   school)的   :In   student(String,int,string)  
   
  再完成In   Student()  
   
  最后就是In   Graduate()  
   
  明白没啦???不懂就去看看think   in   java吧````  
   
  分可以全给我了吧     
3、

如果在Student中没有定义一个无参数构造函数Student(),那么在他的子类Graduate中,就必须调用明确的父类的构造函数,super(参数)。  
  在你的例子中,由于已经在Student中定义了无参数构造函数,系统默认的调用了这个函数。所以最终的结果是这样了。

4、

Person   p=new   Graduate();属于动态绑定~  
   
  况且你可能对对象的产生过程不太了解·  
  如果你的类和别的类有继承关系,而你要想产生一个子类的对象,那么对象的创建其实是这样的过程:  
  先执行祖先类的构造函数,然后在一步步往下  

[转]java中关于构造函数继承的一些问题1


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论