Java中的this和super实例浅析
发布时间 - 2026-01-10 23:21:23 点击率:次要说this和super就不得不说Java的封装和继承了,首先说封装,这是一种思想,算不上一种技术,核心思想就是将对象的同一行为和状态看成是一个整体,将无需对外界暴露的属性和方法隐藏起来,比如一些方法的具体实现和一些私有的变量,通过公共的方法提供对属性的操作,从而提高安全性。
class Person {
private String name = "无名氏";//私有的内部成员变量
private int age = 20;//私有的内部成员变量
public void sayHello(){//公有的方法,外界可以通过调用这个方法获得需要的功能
System.out.println("我的名字是"+name+",今年"+age+"了");
}
public String getName() {//公有的方法,外界通过操作这个方法获取私有变量值
return name;
}
public void setName(String name) {//公有方法,外界通过操作这个方法设置公有变量的值
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然而这种封装也不是绝对的,当我们需要一些很相似的类的时候,往往希望能够通过一个类派生出许多的拥有共同的特性的类,比如通过动物这个类,派生出猫狗鸡鸭这些类,他们都拥有动物的特性,但是又各有特点。这就是Java中的继承,通过继承,我们可以获得父类所暴露给子类的所有成员,而又可以在父类的基础上构建自己特有的属性。
public class StaticDemo {
public static void main(String[] args) {
Student s = new Student();
s.age = 20;//从父类继承的属性
s.name = "张同学";
s.stuNumber = 10;//子类特有的成员变量
s.sayHello();//从父类继承的方法
s.study();
}
}
class Person {
protected String name = "无名氏";// 子类共享的成员变量
protected int age = 20;// 子类共享的成员变量
public void sayHello() {// 公有的方法,外界可以通过调用这个方法获得需要的功能
System.out.println("我的名字是" + name + ",今年" + age + "了");
}
}
class Student extends Person {
public int stuNumber = 20;// 学生特有的学号
public void study() {// 学生特有的方法,学习
System.out.println("好好学习!");
}
}
至此,我们已经大概了解封装和继承,那下面就来看看this和super关键字是什么意思。
super关键字代表的是父类对象,this关键字代表的是当前对象。要理解这些,首先我们要看看子类在创建对象的时候执行了什么。为了方便起见,在此都使用无参构造方法。
编译器找到子类无参构造方法。
执行子类无参构造方法。
在子类无参构造方法的方法体中,第一句代码是隐藏得super();这句代码的意思是执行父类构造方法。
跳转到父类构造方法中,执行父类构造方法,注意,此时子类构造方法并未执行完毕,并且若父类还有父类,则一直执行上一层父类的构造方法,直到找到所有类的祖宗Object类。
将父类的对象的引用存入子类的super中,即子类中的super代表的是父类实体。然而在父类中,super代表的又是父类的父类的实体。
将创建出的当前类的引用存入this。
public class StaticDemo {
public static void main(String[] args) {
GirlStudent g = new GirlStudent();
g.sayName();
}
}
class Person {
protected String name = "无名氏";// 子类共享的成员变量
protected int age = 20;// 子类共享的成员变量
public void sayHello() {// 公有的方法,外界可以通过调用这个方法获得需要的功能
System.out.println("我的名字是" + name + ",今年" + age + "了");
}
}
class Student extends Person {
public int stuNumber = 20;// 学生特有的学号
public String name = "张同学";
public String getSuperName() {//获取当前类的父类名字的方法,对于student是父类,对于girlstudent则是爷爷类
return super.name;//父类中的super代表的是父类的父类,即student的父类即person类,可以看出子类一旦初始化,将会创建出所有父类对象,一直到object
}
}
class GirlStudent extends Student{
public String name = "小红";
public void sayName(){
System.out.println("自己的名字是:"+this.name+",父类的名字是:"+super.name+",爷爷类的名字是:"+super.getSuperName());
}
}
由此可以看出super的用途:用于调用子类隐藏的父类的属性,比如上述代码中的name属性,还有一个比较重要的用途就是用于调用被子类覆写的方法,此时方法名相同,必须使用super才能调用父类的方法。
this的用途:在变量定义不明确时,用来确定调用的具体是哪个变量。
public void setName(String name){
this.name=name;
}
在上面的代码中由于传入的变量也是name,类中本来就存在一个变量也叫name,此时将不明确name是哪个,所以使用this进行区分。
PS:super和this的异同:
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
super()和this()均需放在构造方法内第一行。
尽管可以用this调用一个构造器,但却不能调用两个。
this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
# java中this和super
# java
# this
# super
# 举例讲解Java编程中this关键字与super关键字的用法
# java中this与super关键字的使用方法
# 详解Java中super的几种用法并与this的区别
# java this super使用方法详解
# 详解java中this.getClass()和super.getClass()的实例
# Java this()和super()的使用注意
# Java中的构造方法this、super的用法详解
# Java super和this的对比及使用
# 详解Java使用super和this来重载构造方法
# 关于java关键字this和super的区别和理解
# 子类
# 类中
# 的是
# 特有的
# 是一个
# 可以通过
# 第一条
# 时方
# 自己的
# 都是
# 变量名
# 就会
# 也不
# 会有
# 放在
# 又是
# 一句
# 将会
# 在此
# 这就是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Swift中循环语句中的转移语句 break 和 continue
高端网站建设与定制开发一站式解决方案 中企动力
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
如何用花生壳三步快速搭建专属网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何在腾讯云免费申请建站?
Laravel如何使用Gate和Policy进行授权?(权限控制)
Python面向对象测试方法_mock解析【教程】
如何快速生成高效建站系统源代码?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
新三国志曹操传主线渭水交兵攻略
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
详解jQuery停止动画——stop()方法的使用
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
如何利用DOS批处理实现定时关机操作详解
如何快速查询网址的建站时间与历史轨迹?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
JavaScript常见的五种数组去重的方式
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何在万网开始建站?分步指南解析
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
php 三元运算符实例详细介绍
PHP正则匹配日期和时间(时间戳转换)的实例代码
在Oracle关闭情况下如何修改spfile的参数
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel集合Collection怎么用_Laravel集合常用函数详解
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
python中快速进行多个字符替换的方法小结
如何快速搭建支持数据库操作的智能建站平台?
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
如何快速登录WAP自助建站平台?
智能起名网站制作软件有哪些,制作logo的软件?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何快速搭建虚拟主机网站?新手必看指南
LinuxCD持续部署教程_自动发布与回滚机制
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Laravel如何处理异常和错误?(Handler示例)
lovemo网页版地址 lovemo官网手机登录
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南

