this指向当前实例,super指向父类视图;二者均为非静态上下文中的隐式引用,可调用构造方法且须为首句;this用于访问本类成员或解决命名冲突,super用于调用父类构造、方法或访问被遮蔽的父类成员。

this 和 super 都是 Java 中的引用关键字,用于在类内部明确指代特定对象或成员,但它们指向的对象不同、使用场景不同、作用范围也不同。理解它们的异同,对正确编写构造器、重写方法、访问成员变量至关重要。
• 两者都不是对象,而是指向某个对象的引用(this 指向当前实例,super 指向直接父类实例)
• 都只能出现在实例方法、构造方法或实例初始化块中,不能在 static 方法或 static 块中使用
• 都可以用来调用构造方法(this(...) 或 super(...)),且必须作为构造方法的第一条语句
this 指向当前对象本身(即正在执行代码的那个对象实例)
super 指向当前对象中“继承自父类的部分”,即当前对象的父类视图,用于访问被子类隐藏或覆盖的父类成员
例如:
// 父类
class Animal { String name = "animal"; }
// 子类
class Dog extends Animal {
String name = "dog";
void print() {
System.out.println(this.name); // 输出 "dog"
System.out.println(super.name); // 输出 "animal"
}
}
this 可以访问:
• 当前类的实例变量(包括继承来的,但优先找本类定义的)
• 当前类的实例方法(含重写后的方法)
• 当前类的其他构造方法(通过 this(...))
super 可以访问:
• 直接父类中 public 或 protected 的实例变量(即使子类有同名变量)
• 直接父类中可访问的实例方法(常用于调用被重写的方法)
• 直接父类的构造方法(通过 super(...)),且是唯一能显式调用父类构造的方式
注意:super 不能访问父类的 private 成员,也不能访问父类的静态成员(要用类名访问)
this 的常见用途:
• 区分形参和成员变量名冲突(如 this.name = name;)
• 在构造方法中调用本类其他构造方法(构造器链)
• 将当前对象作为参数传递给其他方法或返回当前对象(如链式调用)
super 的常见用途:
• 在子类构造方法中显式调用父类构造方法(尤其父类无默认构造时)
• 在重写方法中调用父类同名方法(如 super.toString())
• 访问被子类变量遮蔽(shadowing)的父类同名变量
基本上就这些。this 和 super 不是对等概念,也不是“互为反义词”;它们协同工作,共同支撑 Java 的面向对象机制——this 聚焦于“我是什么”,super 聚焦于“我从哪来”。用错位置(比如在 static 中用、或在构造器非首行调用)会直接编译失败,所以务必注意语法约束。
软件前台介绍:网站首页:是访客和网站的信息交流枢纽中心,集成了最新、热门、推荐的商机、商品、企业、新闻信息的综合。进入各大栏目的通道。 商业机会:可以按行业,按分类查看机关商机,如供应、求购、招商等商业机会,可以信息进行评论。不同权限会员具有不同的查看及发布权限。 商品报价:会员发布商品集中展示,可按分类或行业进行查看,及对相关商品发布、查看评论。 公司名录:按行业查看普通、高级、诚信会员的介绍、
0
以上就是java中this和super相同和不同分析的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号