用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

今天就用最通俗易懂的大白话来聊一聊Java中的this和super以及this()和 super()

1、this关键字

package com.cj.study.thissuper;
 
public class Student{
 
 public String name;
 
 public void setName(String name) {
  this.name = name;
 }
 
 public String getName() {
  return name;
 }
 
}

上述代码是很常见的javabean的定义,里边经常会出现this这个关键字

那有思考过为什么这里需要用this这个关键字吗?

为了更简单的解释这个问题,将上述的代码改一下

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

把set方法里的this.name的this去掉,变成了name=name,就会发现个问题,这2个name都是局部变量的name,这就变成了局部变量给局部变量赋值了, 但是咱们是想给对象的name赋值,并不是想给局部变量赋值,由于名称一样导致区分不出来了

所以必须用this来区分一下;当然如果两个不重名的话,name=nnn 这种的不加this是没问题的,这是因为它是先在局部找变量,如果找到了就用局部变量,没找到就去找全局变量。

那这个this到底是啥呢?

this是当前对象的引用,就是说当前用构造函数建的对象是谁,这个this就代表谁,它是一个引用

另外一个问题,如果构造函数想调用另一个构造函数该怎么办呢?

这个时候就需要使用this()了

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

注意:如果在构造函数里调用其他重载的构造函数时,则,被调用的那个构造函数必须放在代码的第一行

下边是示例:

正确的

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

错误的

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

2、super关键字

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()
用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

上述例子是父类里定义了一个字段是num,子类里没有定义,所以最后的输出结果是showNum=4

但是如果子类也定义了一个num值为5,那打印出来的一定是5,因为在调用成员(成员变量和成员方法)时如果不特殊标明,前边其实默认省略了this,他默认调用的是子类的

但是如果这时候我就想用父类的不想用子类的,怎么办

这时候又出现了区分不出来的情况,所以要用super来标明你要调用父类的,而不是子类的

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

当只有父类有,子类没有的情况下,则调的是父类的(因为子类继承了父类,子类就拥有了父类出了私有外的所有东西)

当父类和子类都有的情况下,默认调用的是子类的,但是用super标明了以后调的是父类的

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

如上图所示,this和super的引用是这样指向对象的成员变量和方法。

this指向了不仅父类可继承的成员变量和可继承的方法外,它还指向了子类的成员变量和方法

而super仅仅只是指向了子类对象中从父类继承的成员变量和方法。

那如果子类构造函数想调用父类的构造函数,怎么办?

这时候可以用super();

注意:在子类的构造函数里都必须去调用父类的构造函数,你不写其实第一行都有一个隐式的super();

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

如果父类里不定义无参的构造的话子类的构造函数会报错,所以说明在子类的构造函数默认的都有一句隐式的super();

你的构造函数里默认的都有一个隐式的super();去调用父类无参的构造,但是如果你的构造函数里不想调用默认的父类无参构造,而是想调用父类其他的构造函数,则你可以显式的写出来,而且如果你写了则调用父类的supper(xxx) 必须放在第一行

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

以上就是对this和super的一些总结,可能有点乱,但是还是希望对大家有所帮助

来源:blog.csdn.net/ju_362204801/article/details/91046744

END

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

为什么MySQL不推荐使用uuid或者雪花id作为主键?

为什么建议大家使用 Linux 开发?爽(外加七个感叹号)

IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

记一次由Redis分布式锁造成的重大事故,避免以后踩坑!

十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统(附源码)

用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()

原文始发于微信公众号(Java笔记虾):用最通俗易懂的大白话聊一聊Java中的this和super以及this()和 super()