前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >this引用,final,super,protected关键字(深入浅出+详细理解)

this引用,final,super,protected关键字(深入浅出+详细理解)

作者头像
用户11305962
发布2024-10-09 15:28:11
740
发布2024-10-09 15:28:11
举报
文章被收录于专栏:学习

一.this引用:

1.为什么要有this引用 :

可能出现的问题:1.形参名不小心与成员变量名相同?2.在调用方法时,方法里面没有,任何的对象的指引,函数不知道调用哪个对象,和打印哪个对象?

下图是第二个问题的体现:(指代不明确)

代码语言:javascript
复制
public class Date {
public int year;
public int month;
public int day;
public void setDay(int y, int m, int d){
year = y;
month = m;
day = d;
}
public void printDate(){
System.out.println(year + "/" + month + "/" + day);
}

第一个问题的体现:(这里的year,month,day,是局部变量,会导致自己给自己赋值,从而导致对象被赋值为0,的问题)

2.什么是 this引用:

this 引用指向当前对象 ( 成员方法运行时调用该成员方法的对象 ) ,在成员方法中所有成员变量的操作,都是通过该 引用去访问 。只不过所有的操作对用户是透明的,即用户不需要来传递, 编译器自动完成。

注意: this 引用的是调用成员方法的对象 。从图中可以看出。this的地址调用了该构造方法的 对象 ,的地址相同。

这个是我的理解,如图:

3.this 引用的特性

(1) this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

(2) this只能在"成员方法"中使用,不能在静态方法中使用

(3)在"成员方法"中,this只能引用当前对象,不能再引用其他对象

(5)this还可以调用构造方法,和非静态的,成员方法

如图:

这里this,调用,有参数的构造方法,必须写在第一行

4 . this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收,如图这个隐藏参数,可写可不写

二.super关键字:

由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中访问父类同名成员时,该如何操作?直接访问是无法做到的,Java 提供了 super 关键字,该关键字主要作用:在子类方法中访问父 类的成员

这里通过super,可以给父类成员,赋值(和this,调用构造方法一样,必须写在第一行)

注意:和this一样

1. 只能在非静态方法中使用

2. 在子类方法中,访问父类的成员变量和方法

三.super和 this的异同:

同:

1. 都是Java中的关键字

2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段

3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

异:

1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成 员的引用。

2. 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性

3. 在构造方法中:this(...)用于调用本类构造方法,super(...)用于调用父类构造方法,两种调用不能同时在构造方法中出现

4. 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加但是this(...)用户不写则没有

四.代码块,继承后的执行顺序:(看加载我在前面博客说过:如果不知道请点击,查看 类和对象一(从封装开始讲述)-CSDN博客

1.静态代码块先执行,并且只执行一次,在类加载阶段执行,(并且,只加载一次)

2. 当有对象创建时,才会执行实例代码块,实例代码块执行完成后,最后构造方法执行

如下:

仔细看运行结果:

五.protected 关键字:

在类和对象章节中,为了实现封装特性, Java中引入了访问限定符,主要限定:类或者类中成员能否在类外或者其他包中被访问。(这里也有,请click: 类和对象一(从封装开始讲述)-CSDN博客 )

1.用法:protected 在同一个包地下可以,任意使用,在 不同包下则,只有在 子类才能使用

看运行图:

六.final 关键字

1.1. 修饰变量或字段,表示常量 ( 即不能修改 )

代码语言:javascript
复制
final int a = 10;
a = 20; // 编译出错

2. 修饰类:表示此类不能被继承 (被final修饰的类不能被继承,被其修饰的类,叫做密封类)

3.被final修饰的类,也不能被重写

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档