一、this

在Java语言中,this用来指向当前实例对象,它的一个非常重要的作用就是用来区分对象的成员变量方法的形参(当一个方法的形参与成员变量的名字相同时,就会覆盖成员变量)。示例如下:

class People{String name;//正确的写法public People(String name){this.name = name;}//错误的写法public People(String name){name = name;}
}
//在上述例子中,第一个构造函数使用this.name来表示左边的值为成员变量,而不是这个构造方法的形式参数。
//对于第二个构造方法,由于这个函数中形式参数与成员变量有着相同的名字,因此对于语句name=name,等号左边和右边的两个name都代表的是形式参数
//在第二种情况下,只能通过this才能访问到成员变量

this的用法
this指代当前对象,谁调指的就是谁。在方法中访问成员变量,默认有个this。
(1)this.成员变量名——访问成员变量
(2)this.方法名——调用方法
(3)this()——调用构造方法


二、super

super关键字:当子类重写父类的方法后,子类对象将无法访问父类被重写的方法。为了解决这个问题,Java中专题提供了一个super关键字用于访问父类的成员。
(通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。)
super可以用来访问父类的方法或成员变量。当子类的方法或成员变量与父类有相同名字时也会覆盖父类的方法或成员变量,要想访问父类的方法或成员变量只能通过super关键字来访问,示例如下:

package com.haobi;
/** super demo*/
class Base{public void f() {System.out.println("Base:f()");}
}class Sub extends Base{public void f() {System.out.println("Sub:f()");}public void subf() {f();}public void basef() {super.f();}
}public class Test4 {public static void main(String[] args) {Sub s = new Sub();s.subf();s.basef();}
}
//程序输出结果如下:
Sub:f()
Base:f()

super的用法
super指代当前对象的父类对象,super()调用父类的构造方法必须位于子类构造方法的第一句(在子类方法中不一定是第一句)。
(1)super.成员变量名——访问父类的成员变量
(2)super.方法名——调用父类的方法
(3)super()——调用父类的构造方法

注:子类的构造方法中必须通过super关键字调用父类的构造方法,这样可以妥善的初始化继承自父类的成员变量。如果子类的构造方法中没有调用父类的构造方法,Java编译器会自动加入对父类无参构造方法的调用。(如果父类没有无参构造方法,会有编译错误。)


三、this与super的区别

区别点 this super
属性访问 访问本类中的属性,如果本类中没有此属性,则从父类中继续查找 访问父类中的属性
方法 访问本类中的方法,如果本类中没有此方法,则从父类中继续查找 直接访问父类中的方法
调用构造 调用本类构造,必须放在构造方法首行 调用父类构造,必须放在子类构造方法的首行
特殊 表示当前对象 无此概念

注:
①既然this和super都可以调用构造方法,但是两者不能同时出现,因为两者调用构造时都必须放在构造方法的首行。
②无论子类如何操作,最终必须要首先调用父类中的构造方法。


四、知识点

1、请解释为何注释掉Fuse类的构造函数后,会发生编译错误?

//如下代码编译错误
package app.construction;
public class Fuse{private String name;//public Fuse(String name){this.name = name}
}package app.construction
public class QuickFuse extends Fuse{}

上述代码发生编译错误的原因如下:
当编译器遇到QucikFuse类时,就会发生错误,并为其提供一个默认的构造函数。默认的构造函数没有参数,并在默认情况下会调用其超类的无参构造函数。然而,Fuse()构造函数却接受了一个字符串参数,这意味着编译器不再为Fuse类提供默认构造函数。QuickFuse的默认构造函数无法调用超类的无参构造函数,因为该构造函数并不存在。


Java学习手册:thissuper相关推荐

  1. 阿里P8连夜赶出来的5000页Java学习手册及笔记,巴适的很!

    网上的博客知识太碎片化,而看视频学习效率太低,很多人想:如果有完整知识体系 PDF 教程供大家学习,那该多好! 不要慌,成系统的教程和高质量博客,都帮你整理好了! 1. 高质量博客 刚刚整理完毕,专注 ...

  2. Java 如何学习?这份5000页Java学习手册值得拥有,适合零基础自学也适合查漏补缺!

    学习技巧 在以前大部分人学习都是先去找本书,先看看,再试,要是不懂了在去网上去查,再在继续啃着书本.但现在向书学习和在网上学习这掌握的效果是不同的,要学会用适合自己的学习方式. 目前的学习要是能看进去 ...

  3. Java学习手册:华为2020届校园招聘——软件题

    一.全量字符集与已占用字符集(AC100) 输入描述: 输入一个字符串,字符串中包含了全量字符集和已占用字符集,两个字符集用@相连.@前的字符集合为全量字符集,@后的字符集为已占用字符集合.已占用字符 ...

  4. Java学习手册:如何获取父类的类名?

    Java语言提供了获取类名的方法:getClass().getName().代码如下所示: package com.haobi; /** 获取类名*/ public class Test1 {publ ...

  5. Java学习手册:Java是否支持多继承?为什么?

    答案:不支持.(准确的说是:在Java中,类只支持单继承,而接口可以实现多继承.) James Gosling在1995年2月发表了一篇名为"Java概览"的Java白皮书,文章解 ...

  6. Java学习手册:(数据结构与算法-递归)一个人爬楼梯,可以一次爬一阶或者两阶,问n层楼梯有多少种爬法?

    算法思想: (1)只有一层楼梯,有1种方法,即 f(1) = 1; (2)有两层楼梯,有2种方法,即 f(2) = 2: (3)有三层楼梯,a.如果第一步爬一层,后面还有两层楼梯未爬,有2种方法,即f ...

  7. Java学习手册:Error(错误类)Exception(异常类)

    Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类,其中Exception表示由于网络故障.文件损坏.设备错误.用户输入非法等情况导致的异常.而Error表 ...

  8. Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?

    问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...

  9. java web开发学习手册_Java 人必备学习手册开发下载!

    今天给大家分享一套 5000 页的 Java 学习手册,新鲜出炉!此手册内容专注 Java技术,包括 JavaWeb,SSM,Linux,Spring Boot,MyBatis,MySQL,Nginx ...

最新文章

  1. 为Nagios定义自定义脚本检测内存状态
  2. DICKSON隆重推荐的博客 --- SAP
  3. Jenkins(二)
  4. Qt 原理-MOC(2) QObject.h
  5. 让 .NET 轻松构建中间件模式代码
  6. vue.js将本地文件上传到ftp服务器,vue项目使用FTP传输部署项目服务器,node命令编写...
  7. 特征工程之归一化及标准化
  8. 容器算法迭代器初识----容器嵌套容器
  9. 中国遥感卫星地面站存档数据目录服务系统
  10. 5G时代的到来,对网络公关将产生哪些深远影响?
  11. C语言中的EOF是什么?
  12. Linux进程间通信信号量
  13. 抢先体验 Ubuntu 22.04 Jammy Jellyfish
  14. 牛客寒假算法基础集训营1 - C - 小a与星际探索(bfs || 暴力)
  15. 海尔小管家1号店嗨购盛典引爆 市场份额稳居红星美凯龙第一
  16. 显示和隐藏mac文件
  17. mysql cascade 查询_Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)
  18. 总结UG编程使用的小技巧
  19. 区块链知识(一) | 实例化合约Contract
  20. 跨境电商社交媒体:选择合适的平台

热门文章

  1. 操作系统-进程控制块PCB
  2. 使用python处理题库表格并转化为word形式
  3. matlab 两个函数相除,matlab代写常见的8个函数调用实例
  4. Spark Streaming 流式计算实战
  5. 关于Surface的Win10系统无法更新的解决方案
  6. 新版微信支付 v3 php uniapp
  7. 织梦模板直接写php,织梦模板内怎么加入php代码
  8. VS-安装AStyle
  9. c# 基本值类型及其默认值
  10. Access数据库防暴库技术