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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-7-30 14:18  /  2121 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
super(name),使显式调用父类的构造方法,子类继承父类的方法getName(), new Student("lisi").getName()返回值的区别:如果父类和子类中变量唯一,则返回唯一变量的值;如果子类和父类中有相同的变量,则返回父类的值,Student类继承了Person类,子类Student中是为有参构造方法,所以想调用父类的构造方法,必须显式调用super("lisi"),否则,不会调用父类的构造方法!详细介绍如下:
第一种情况为:实际上没有调用父类的构造方法,由于继承Person,所以直接把参数赋给继承的name变量;调用的getName()返回仅有的变量值;
第二种情况为:通过super(name)调用父类的构造方法把参数值赋值给父类中的变量name,由于子类和父类都有相同的变量,所以调用方法getName()返回的是父类中的变量值,
第三种情况为:this。name = name把值赋给子类Student中的变量,而父类中的为空,由于子类和父类都有相同的变量,所以调用方法getName()返回的是父类中变量的null值,
回复 使用道具 举报

第三种情况,个人理解。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
  1. class Student extends Person
  2. {
  3.         String name;//[color=Red]这是第三种情况。和第一种情况,区别在于这里定义了Student类里的name,默认的值为null.[/color]
  4.         Student (String name)
  5.         {
  6.                
  7.                 this.name=name;[color=Red]this.name指向的是本类的name[/color]
  8.         }
  9.         public static void main(String[] args)
  10.         {
  11.                 System.out.println(new Student("lisi").getName());
  12.         }
  13. }
复制代码
回复 使用道具 举报
建议把毕老师的构造器初始化视频再看一遍
子类在初始化的时候会隐式调用父类的默认数构造器
第一种情况:子类构造器指定了参数,调用自身的构造器初始化 结果:lisi
第二种情况:通过super显示调用了父类的有参数的构造器初始化,name属性。
第三种情况:子类的name属性只是被系统默认的初始化为了null,调用父类的

默认构造器完成父类的初始化动作,此时子类还没有来得及调用构造器初始化

。打印出来的就是null了

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘健 于 2012-7-30 17:31 编辑

将你的代码稍稍修改了下,你就能看出执行顺序了
  1. package com.itheima;

  2. public class persion {
  3.         String name = "父类赋值";
  4.        
  5.         public persion() {
  6.                 // TODO Auto-generated constructor stub
  7.         }
  8.        
  9.         public persion(String name){
  10.                 System.out.println("我是父类构造器");
  11.                 this.name = name;
  12.         }
  13.        
  14.         public String getName(){
  15.                 return name;
  16.         }
  17. }
复制代码
  1. package com.itheima;

  2. public class student extends persion{
  3.         String name = "子类赋值";
  4.        
  5.         public student(String name) {
  6.                 //super(name);
  7.                 this.name = name;
  8.                 System.out.println("我是子类构造器");
  9.         }
  10.        
  11.         public student() {
  12.                
  13.         }
  14.        
  15.         public static void main(String[] args) {
  16.                 System.out.println(new student("list").getName());
  17.         }
  18. }
复制代码
按你第一种情况,输出
  1. 我是父类构造器
  2. 我是子类构造器
  3. list
复制代码
按你第二种情况,输出
  1. 我是子类构造器
  2. list
复制代码
按你第三种情况,输出
  1. 我是子类构造器
  2. 父类赋值
复制代码
这样看你应该就明白了
回复 使用道具 举报
陈红建 来自手机 中级黑马 2012-7-30 17:47:43
7#
我是java的子类,我继承了java的所有方法。哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马