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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© God’s favoure 中级黑马   /  2014-10-27 23:12  /  1333 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 God’s favoure 于 2014-10-27 23:34 编辑

在面向对象学习的时候,this与super关键字很容易让人感觉到迷惑,当然了,我也不可避免的躺枪,为此,我对两个关键字进行分析总结,在这跟大家分享一下.
this,表示本类对象的引用,哪个对象调用,this就代表了哪个对象.
比如:class Person{
  private String name;
  private int age;
  public Person(String name,int age){//通过构造赋值
    this.name = name;  //明确表示为本类中的name赋值
    this.age = age;
  }
  public void getInfo(){  //取得信息
    System.out.println("姓名:"+name+",年龄 :"+age);
  }
}
public class Demo{
  public static void main(String[]ags){
    Person p = new Person("张大锤",16);
    p.getInfo();
  }
}
如果上面的一段小例子没有使用this 关键字的话,运行出来的结果,将会是默认值,也就是说,没有this 关键字赋值时候,属性就不能明确的被指出.
this的另一种用法,就是this()语句,在构造方法之间进行调用.
class Person{
  private String name;
  private int age;
  public Person(){
    System.out.println("无参构造函数");
  }
  public Person(String name,int age){//通过构造赋值
    this();
    this.name = name;  //明确表示为本类中的name赋值
    this.age = age;
  }
  public void getInfo(){  //取得信息
    System.out.println("姓名:"+name+",年龄 :"+age);
  }
}
public class Demo2{
  public static void main(String[]ags){
    Person p = new Person("张大锤",16);//调用有参构造方法
    p.getInfo();
  }
}此时输出结果与Demo不同的是,多出了一行:无参构造函数.
值得注意的是,构造方法是在实例化对象时候,被自动调用的,也就是说在类中的所有方法中,只有构造方法是被有线调用的,所以使用this调用构造方法必须也只能放在构造方法的第一行.
super关键字指向父类的存储空间,这句话与我听到的好多,指向父类的对象有冲突,但是可以肯定,super就是指向了父类的存储空间.这个可以通过一些个小代码短就可以检测出来.比如:Student s = new Student();  s是在栈内存中分配存储空间的,存的是一个地址,这个地址指向了堆内存中的new Student();那么,如果Student此时继承Person的话,他们的实质就是在堆内存中分配空间的new Student()里面继续划分出一个小的空间,取名叫super,而super也存有一个地址,这个地址指向父类Person的.
那么,知道了这些以后,super实用价值就体现出来了.
(1)引用父类的成员:super.变量 或 super.方法([参数列]),当然了,这个需要相应的访问权限.
(2)在子类构造方法中调用父类的构造方法:super([…]);//与this用法类似,应放在子类构造方法的第一行位置上
请注意:父类变量的初始化只能通过调用super([…])方法,由父类来完成,子类不可能“代劳”。只有父类变量的初始化完成之后,子类才开始其新增变量的初始化工作。
另一个问题是,都知道,this()和super()都需要放在构造函数第一行,那么,两个在一起的时候,到底谁在第一行呢?其实,两个是不能在一起的.哈哈,其实写了this(),默认的super()没有了.然而,无论第一行是this还是super,保证每个子类构造方法,直接还是间接都会访问到父类构造方法,就可以了.


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

2 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
感谢楼主的分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马