继承里面构造器的调用,程序怎么执行,详解3

    这次是第三篇写关于继承的东西了,之前本人我感觉把程序怎么跑的搞懂了,就感觉自己继承学的差不多了,就感觉自己继承可以拿出手了,直到碰到这个坑,才感觉自己其实差的太多了,自己还需要不断的差缺补漏,继承的世界很丰富。

    如果看过这篇的文章学了点知识,感觉继承还不是特别清楚,我是建议大家再去看下我之前那两篇关于继承的文章,我个人觉得那对于想搞清楚程序是怎么执行的人还是有帮助的。

 

 下面给出本篇文章的内容

父类

public class Person {

    int a;

    Person(){

      System.out.println("父类的的无参构造方法");

      a=10;

    }

    Person(int b){

      System.out.println("父类的有参构造器");

      System.out.println(a);

      a=20;

      System.out.println("父类有参构造方法中的a:"+a);

      System.out.println("我是父类有参构造方法下面的");

    }

   

}

 

子类

public class Student extends Person{

 

    Student(){

     

    }

    Student(int b){

      Person p = new Person(b);

      System.out.println(this.a+"<>"+v.a);

    }

  

    public static void main(String[] args) {

      int c =0;

  Student st1 = new Student(c);

   System.out.println(st1.a);

   }

   

   

 

}

 

可以先不看运行结果,自己先琢磨一下。

运行结果:

父类的的无参构造方法

父类的有参构造器

0

父类的有参构造方法中的a:20

我是父类有参构造方法下面的

10<>20

10

 

    这里要讲的是关于继承的一个坑,在子类中Student st1 = new Student(c) new了一个子类对象,那么系统会默认调用父类的无参构造器的,这里需要说明一下对父类的构造器的调用是怎么回事:如果在子类中没有用super显示调用父类的那个构造器,那么不管是子类的哪个构造器,都会默认的去调用父类的无参构造器的。

这里之所以运行父类的有参构造器是因为在子类的构造器里面new了一个父类的对象(Person p = new Person(b);

 

),调用了父类的有参构造器。也输出了a的值确实为20,那么现在问题来了,最后为什么就成10呢?其实我程序的测试结果或许已经给大家很多提示了。程序确实是跑到了父类的有参构造方法,a的值也确实被赋值成了20,但是我们要知道程序为什么会跑到父类的构造器里面?,是因为new了一个父类对象是吧,那么这个对象就有了自己的属性a,它被赋值是20,那么最后为什么又了10 了呢?我看看程序的最后的输出是输出谁?那是输出子类对象的属性a的值,说到这里想必大家都恍然大悟吧。这里的坑主要是搞懂那两个a的值是两个不同对象的不同属性值,是互不干扰的。那个10是子类对象属性a的值,20是父类对象属性a的值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值