super与this的区别,更进一步的区别!——Java学习
this与super的含义
在Java中,this有两层含义:
- 指示隐式参数的引用(就是当前对象的引用)
- 调用该类的其他构造器
而super也有两层含义:
- 调用超类的方法
- 调用超类的构造器
前言
在写这篇文章之前,我也查阅了其他博主关于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的区别!不正之处,还希望读者不吝赐教!
super与this的区别,更进一步的区别!——Java学习的更多相关文章
- 浅析String、StringBuffer、StringBuilder的区别以及性能区别
前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...
- Java学习笔记--Collection和Collections的区别
转自 http://pengcqu.iteye.com/blog/492196 比较Collection 和Collections的区别. 1.java.util.Collection 是一个集合 ...
- Java学习|Exception和Error有什么区别?
典型回答: Exception和Error都继承了Throwable类,java中只有Throwable类型的实例才能被Throw(抛出)或者catch(捕获). Exceptio ...
- Java中JDK、JRE和JVM三者之间有什么区别和联系?Java基础!
任何语言或软件都需要一个运行环境.正如人想生活在空气中,鱼想生活在水中一样,喜荫植物不能暴露在阳光下,任何物体个体的存在都离不开其所需的环境,编程语言也是一样的. 接下来就详细描述一下Java中JDK ...
- Java 学习(11): 面向对象编程—继承(super,this)
Java 继承 what: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.子类从它的父类中继承可访问的数据域和方法,也 ...
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...
- Java中super的用法并与this的区别(转载)
一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行 public class Demo1 { public static void main(String[] ...
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
Comparable和Comparator是JDK中定义的2个比较接口,很相似,但又有所不同. 这2个接口的作用和区别也是Java中的常见经典面试题. 下面我们就来详细介绍下这2个接口的定义.作用.区 ...
- Java学习2 - JDK和JRE和JVM的区别_JDK的下载安装_环境变量配置
一 JDK和JRE和JVM的区别 Jdk: Java Development kit - Java 开发工具 JRE: Java Runtime Environment - java运行环境 JVM: ...
随机推荐
- GPO - Windows Server Update Services
Windows Server Update Services Configuration Wizard: Approve procedure of these updates is very tiri ...
- Python Ethical Hacking - VULNERABILITY SCANNER(7)
VULNERABILITY_SCANNER How to discover a vulnerability in a web application? 1. Go into every possibl ...
- 使用PowerShell自动编译部署前端
前言 最近在开发一套管理系统,做了前后端分离. 后台使用的是Asp.Net Core 3.1 前端使用的是Vue+Ant Design 自己搞了一台云服务器,打算把系统部署到云服务器上.以供外网访问. ...
- Kubernetes的10个基本事实!你知道几个?k8s与Docker又有何不同?
无论您是Kubernetes的新手还是只是想获得更多知识,这篇文章都会帮到您! Kubernetes是一个增长的趋势.近年来,K8s技术经历了从小型开源Google项目到Cloud Native Co ...
- Linux切换用户时报错/.bash_profile: Permission denied,命令行(终端提示符)出现-bash-4.2$
Linux切换用户时报错/.bash_profile: Permission denied,命令行(终端提示符)出现-bash-4.2$ 利用su - 切换用户时,发现有一个用户切时出现如下情况 [r ...
- Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)
周五下午爆洞能不能让人们好好休个周末! 分析过程 本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控 ...
- python map函数、filter函数、reduce函数
1.map函数:map(func,可迭代对象): ①func可以是自定义的函数,也可以是功能简单的匿名函数(通过lambda定义) ②处理逻辑:表示将传入的可迭代对象依次循环,将每个元素按照传入的fu ...
- Bug--Mybatis报错:There is no getter for property named 'id' in 'class java.lang.Integer'
Mybatis 添加@Param("")注释就可以了
- 富文本数据 解析HTML
后台返回给前端的富文本数据如: { "status": 1, "info": "获取活动数据成功", "data": [ ...
- C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!
今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...