一、什么是this 和 super
1.this关键字
this
关键字代表当前对象的引用,它指向调用当前方法的对象。在类的方法中,使用 this 可以明确地访问当前对象的属性和方法,尤其是在方法参数与类的成员变量同名的情况下, this 可以避免歧义。
2.super关键字
super
关键字用于访问父类的成员,包括父类的属性、方法和构造函数。当子类中存在与父类同名的成员时,通过 super 可以访问父类的同名成员,避免子类对父类成员的隐藏和覆盖带来的访问不便。
二、this 和 super 的区别
当问到什么和什么的区别时,我们就要从他们的相同点中去找到不同的地方
【相同点】
- 都是java中的关键字
- 只能在类的
非静态方法
中使用,用来访问非静态成员方法和字段,因为静态的是不依赖对象的- 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
【不同点】
对比维度 | this 关键字 | super 关键字 |
---|---|---|
本质含义 | 指向当前对象的引用 | 指向父类对象的引用 |
访问属性 | 访问当前对象的属性 | 访问父类的属性 |
调用方法 | 调用当前对象的方法 | 调用父类的方法 |
调用构造函数 | 调用本类的其他构造函数 | 调用父类的构造函数 |
使用场景 | 解决成员变量与局部变量重名问题、链式调用构造函数 | 子类重写父类方法后仍需调用父类方法、子类构造函数调用父类构造函数 |
存在限制 | 不能在静态方法和静态代码块中使用 | 不能在静态方法和静态代码块中使用 |
三、代码示例
父类
public class base { public int a = 10; public int b = 20; }
子类
public class derived extends base{ public int a = 100; public int b = 200; public void method(){ system.out.println(this.a); system.out.println(this.b); system.out.println(super.a); system.out.println(super.b); } }
调用子类函数
public class test { public static void main(string[] args) { derived derived = new derived(); derived.method(); } }
执行结果
四、注意事项
- 静态环境限制: this 和 super都不能在静态方法和静态代码块中使用,因为静态成员属于类本身,而不是某个具体的对象,不存在当前对象和父类对象的概念。
- 构造函数调用顺序: 在子类的构造函数中,
super()
(调用父类无参构造函数)或super(参数)
(调用父类有参构造函数)必须是构造函数的第一行代码,否则会编译报错。而 this() 调用本类其他构造函数时同样需要放在第一行,所以super() 和 this() 不能同时出现在一个构造函数中。
五、总结
this 和 super 虽然都是java中的关键字,但它们的作用和使用场景有着明显的区别。this主要用于操作当前对象的属性和方法,解决变量重名和构造函数链式调用问题;而 super 则专注于访问父类的成员,处理子类与父类成员的继承和覆盖关系。掌握好这两个关键字的使用,不仅能够提升我们的代码质量,还能在java面试中脱颖而出。
到此这篇关于java面试题this 和 super 的区别的文章就介绍到这了,更多相关java this和super区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论