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的区别!不正之处,还希望读者不吝赐教!

super与this的区别,更进一步的区别!——Java学习的更多相关文章

  1. 浅析String、StringBuffer、StringBuilder的区别以及性能区别

    前奏: 比较三者之间的区别在与区别他们做相同的事情的时候的区别,那就是在我们常见的拼接字符串的时候,StringBuffer.StringBuilder调用的是appende()方法,而String很 ...

  2. Java学习笔记--Collection和Collections的区别

    转自 http://pengcqu.iteye.com/blog/492196 比较Collection 和Collections的区别.   1.java.util.Collection 是一个集合 ...

  3. Java学习|Exception和Error有什么区别?

    典型回答:      Exception和Error都继承了Throwable类,java中只有Throwable类型的实例才能被Throw(抛出)或者catch(捕获).      Exceptio ...

  4. Java中JDK、JRE和JVM三者之间有什么区别和联系?Java基础!

    任何语言或软件都需要一个运行环境.正如人想生活在空气中,鱼想生活在水中一样,喜荫植物不能暴露在阳光下,任何物体个体的存在都离不开其所需的环境,编程语言也是一样的. 接下来就详细描述一下Java中JDK ...

  5. Java 学习(11): 面向对象编程—继承(super,this)

    Java 继承 what: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.子类从它的父类中继承可访问的数据域和方法,也 ...

  6. Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别

    1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...

  7. Java中super的用法并与this的区别(转载)

    一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行 public class Demo1 { public static void main(String[] ...

  8. OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)

    Comparable和Comparator是JDK中定义的2个比较接口,很相似,但又有所不同. 这2个接口的作用和区别也是Java中的常见经典面试题. 下面我们就来详细介绍下这2个接口的定义.作用.区 ...

  9. Java学习2 - JDK和JRE和JVM的区别_JDK的下载安装_环境变量配置

    一 JDK和JRE和JVM的区别 Jdk: Java Development kit - Java 开发工具 JRE: Java Runtime Environment - java运行环境 JVM: ...

随机推荐

  1. Redis 分布式锁(一)

    前言 本文力争以最简单的语言,以博主自己对分布式锁的理解,按照自己的语言来描述分布式锁的概念.作用.原理.实现.如有错误,还请各位大佬海涵,恳请指正.分布式锁分两篇来讲解,本篇讲解客户端,下一篇讲解r ...

  2. Burp Suite Proxy Module - 代理模块

    官方参考链接:https://portswigger.net/burp/documentation/desktop/tools/proxy/using 1.Burp Suite 代理设置选项 2.浏览 ...

  3. OSCP Learning Notes - Post Exploitation(3)

    Post-Exploit Password Attacks 1. Crack using the tool - john (Too slow in real world) Locate the roc ...

  4. Go的100天之旅-06数组和Slice

    目录 数组 Slice 数组 Go的数组和其它语言基本上一样,是长度固定的特定类型元素组成的序列,这基本上是所有语言数组的特性.和其它语言相比差异主要在声明和初始化的写法上,下面是简单声明一个数组: ...

  5. javascript : 找到一个树型数据的一个节点及其所有父节点

    如题. (function () { let tree = { "id": 0, "label": "all", "childre ...

  6. 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

    Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...

  7. freeRTOS内核学习笔记(1)-编程标准

    在开始具体的学习之前,你应该先了解freeRTOS的编程标准.这能够方便你在接下来的阅读中快速的了解一些内容 的基本信息,并方便记忆.此外,良好的编程风格也是工作效率的保障. 你可以在https:// ...

  8. springboot项目部署到tomcat步骤以及常见问题

    ------------恢复内容开始------------ 本文分为两个部分,一,是打包的步骤,二,是我项目中所遇到的问题以及解决方法 一. 打包为war包步骤 1.修改打包方式为war 在pom. ...

  9. Android TV 键盘样式开发

    布局: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=& ...

  10. java 控制语句、数组、方法

    一.控制语句 1.if 语句 if语句是指如果满足某种条件,就进行某种处理. 流程图: 2. if…else语句 语法格式: if (判断条件){ 执行语句1 …… }else{ 执行语句2 …… } ...