this与super的含义

在Java中,this有两层含义:

  1. 指示隐式参数的引用(就是当前对象的引用)
  2. 调用该类的其他构造器

而super也有两层含义:

  1. 调用超类的方法
  2. 调用超类的构造器

前言

在写这篇文章之前,我也查阅了其他博主关于super与this的区别的文章,他们都讲的很对,但是没有说到我想知道的重点。例如cheneypku的这篇文章 Java中this与super的区别 所述:

它们的区别:

1、super()主要是对父类构造函数的调用,this()是对重载构造函数的调用

2、super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用

但是,它们还有一点不同,那就是:

super不是一个对象的引用,因此不能够将super赋给另一个对象变量,他只是一个指示编译器调用超类(或父类)方法的特殊关键字。

例证

this

可以把this赋值给对象类型的对象变量,进而调用类中的数据字段。

public class Students{
private String name;
private String otherName;
private int age; Students S = this; //编译通过 public Students(String name, String otherName, int age){
S(otherName); //出现错误!
//or
this(otherName);//编译通过!所以在调用其它构造器时,还是只能使用this()!
S.age = age; //可以正常引用Students类中的数据字段
}
public Students(String OtherName){
S.otherName = OtherName;
} }

这说明,this实际上是当前对象的一个引用,可以被赋值给相应的对象变量。但是,当需要调用类中的其他构造器时,还是只能够使用this()语句!

super

class Person{
private String name;
public Person(String name){ //超类的构造函数
this.name = name;
}
public String getName(){ //定义一个方法
return name;
}
}
public class Students extends Person{
private String name;
private int age; Person P = super;//已经出现了编译错误!!
public Students(String name, int age){
P(name);//编译错误!
P.getName();//错误!!也不能调用超类的方法!
this.age = age;
}
}

所以,super不能够赋给一个对应的对象变量,它不是一个对象的引用!

总结

它们的相同点是:调用构造器的语句只能够作为另一个构造器的第一条语句出现,这也是它们不能够出现在同一个构造器内的原因。

而this的本质是一个对象的引用,super只是一个指示编译器调用超类方法的特殊关键字,但在调用本类中的其他构造器时,还是只能够使用this()语句。

虽然这个点很小,但是希望能够帮助各位更加深刻的理解this和super的区别!不正之处,还希望读者不吝赐教!

最新文章

  1. Storyboard & XIB 自己的理解
  2. android开发--数据库(更新或者降低版本)
  3. Linux设置ssh无密码登陆
  4. TinyThread源码分析之中断
  5. IE 8兼容:X-UA-Compatible的解释
  6. CSS3实现图片鼠标悬浮放大效果
  7. JAX-RS REST 服务结果的自动封装
  8. Maven - 本地仓库(.m2) vs. 远程仓库(联网)
  9. matlab 表示一个导数的函数
  10. YUV420、YUV422、RGB24转换
  11. PHP计算年龄
  12. 性能监控(2)–linux下的vmstat命令
  13. maven web项目生成WebContent或WebRoot目录
  14. pycharm下打开、执行并调试scrapy爬虫程序
  15. 2017.7.11 linux 挂载
  16. Java基础知识_毕向东_Java基础视频教程笔记(13 字符)
  17. Python: json模块实例详解
  18. SQL Server中的高可用性(3)----复制 (转载)
  19. Restful api 防止重复提交
  20. Android开发中,系统是如何区分不同的App的(转自csdn)

热门文章

  1. 浏览器如何执行JS
  2. 数字图像处理 第四章 P157 小错误
  3. vue使用elementUI form表单label样式修改
  4. 分布式锁(3) ----- 基于zookeeper的分布式锁
  5. vue学习(五) 访问vue内部元素或者方法
  6. 关于简单的数据双向绑定原理,defineProperty 和Proxy演示
  7. BUUCTF-web HappyCTFd (CVE-2020-7245)
  8. Laragon修改配置快速创建其他框架的项目
  9. MySQL在同一个表上,删除查询出来的结果
  10. Python file() 函数