面向对象之:this和super关键字

在面向对象学习的时候,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 ,保证每个子类构造方法,直接还是间接都会访问到父类构造方法,就可以了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值