A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汤姆纳斯 高级黑马   /  2014-6-15 18:15  /  1289 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汤姆纳斯 于 2014-6-23 16:48 编辑
  1. class  Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Student s=new Student("nihao",28);
  6.                 s.work();
  7. System.out.println(s.getAge());
  8.         }
  9. }

  10. class Person
  11. {
  12.         String name;
  13.         int age;
  14.         
  15.         Person(String name,int age)
  16.         {
  17.                 this.name=name;
  18.                 this.age=age;
  19.         }

  20.                
  21.                  void setAge(int age)
  22.                 {
  23.                 this.age=age;

  24.                 }
  25.         int getAge()
  26.                 {
  27.                 return this.age;
  28.                 }
  29.                  void setName(String name)
  30.                 {
  31.                 this.name=name;

  32.                 }
  33.         String getName()
  34.                 {
  35.                 return this.name;
  36.                 }
  37. }
  38. class Student extends Person
  39. {
  40.         Student(String name,int age)
  41.         {
  42.                 super("libai" ,17);//为什么结果总输出libai 17为什么换成(name,age)就输出nihao28
  43.                 //this.name=name;
  44.                 //this.age=age;
  45.         }
  46.         //super(libai,18);
  47.         
  48.         
  49.   void work()
  50.                 {
  51.           System.out.println(this.getName());
  52.                 System.out.println(this.getAge());
  53.                 }
  54. }
复制代码


super在继承时            super(name,age)和super(“libai”,18)在显示初始化的区别,

6 个回复

倒序浏览
说实话没看清楚你到底想问什么, 你Student的构造函数 传递的值根本就没用到,就是调用了父类的构造函数("libai",18),肯定输出就是这个啊.  当你传name和age super就接收你的name和age  
  
回复 使用道具 举报
倪大大 发表于 2014-6-15 19:17
说实话没看清楚你到底想问什么, 你Student的构造函数 传递的值根本就没用到,就是调用了父类的构造函数("lib ...

第46行:为什么结果总输出libai 17为什么换成(name,age)就输出nihao28
回复 使用道具 举报
super("libai" ,17);就是把libai赋给Person中的name,把17赋给Person中的age,Student通过继承获得这个name和age,不管在你在Student的构造函数中传入什么,最终打印的都是libai 17
super(name ,age);这时的name和age是通过Student构造函数传入的name和age,赋值给Person的name和age,Student再通过继承获得这个name和age,所以Student构造函数传入什么就打印什么
回复 使用道具 举报
汤姆纳斯 发表于 2014-6-15 19:34
第46行:为什么结果总输出libai 17为什么换成(name,age)就输出nihao28

因为你根本没有给Student这个类传值啊,你是在给父类的age和name 传值.Student继承父类的age和name,
而换成(name,age)  那么你传递的值就变成了 你Student构造时传入的值, 当然打印你传入的name额age
  这完全就是同一个意思啊  
回复 使用道具 举报
首先 Student s=new Student("nihao",28);

1.对应找Student类有两个对应参数的构造函数,并将nihao赋值给name,28赋值给age,读到super("libai" ,17);去父类找对应参数构造函数,找到Person(String name,int age)

,初始化之后,name=libai,age=17;
2.对应找Student类有两个对应参数的构造函数,并将nihao赋值给name,28赋值给age,读到super(name,age);也就是super(nihao,28);父类找对应参数构造函数,找到Person(String name,int age)

,初始化之后,name=nihao,age=28;
回复 使用道具 举报
首先,构造函数是不能够继承的;
子类在创建实例对象的时候会去调用父类中的构造函数;
在回过头来看看你的代码,你直接在子类构造函数中设置成super(name,age)好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马