一、this关键字
在 Java 中,this 关键字是一个引用,它代表当前对象的引用,它可以在类的成员方法和构造方法中使用。
this 关键字主要有以下 3 33 个作用,请同学们认真学习。
- 引用当前对象:当一个类的实例化对象调用自己的成员方法时,可以使用
this
关键字来引用当前对象。比如在类的方法中需要访问当前对象的成员变量或调用其他方法时,可以使用this
关键字来明确指代当前对象。 - 解决变量名冲突:当方法的参数名和成员变量名相同时,使用
this
关键字可以区分成员变量和参数变量。例如,如果一个方法的参数名与成员变量名相同,使用this
关键字可以明确指明成员变量。 - 调用构造方法:在一个构造方法中,可以使用 this 关键字调用同类的其他构造方法,这样可以避免重复代码,并且方便构造方法的重载使用。
提示:this 关键字只能在非静态的成员方法和构造方法中使用,不能在静态方法中使用,因为静态方法属于类级别,没有当前对象的引用。
二、super关键字
在 Java 中,super 关键字是一个引用,它用于引用父类的成员变量、方法和构造方法。
super 关键字主要有以下 4 44 种用法,请同学们认真学习。
- 调用父类的构造方法:在子类的构造方法中,可以使用
super
关键字来调用父类的构造方法。这样可以在子类构造对象时,先执行父类的构造方法,确保父类的初始化工作完成。 - 调用父类的成员变量和方法:在子类中,如果父类和子类有同名的成员变量或方法,可以使用
super
关键字来引用父类的成员。通过super
关键字,可以明确指定调用父类的成员,避免歧义。 - 调用父类的普通方法:在子类的方法中,可以使用
super
关键字来调用父类的普通方法。这样可以在子类中重写父类的方法,但又需要在子类的方法中调用父类的原始实现。 - 在内部类中使用:在内部类中,如果内部类和外部类有同名的成员变量或方法,可以使用
super
关键字来引用外部类的成员。通过super
关键字,可以明确指定调用外部类的成员。
提示:super 关键字只能用于在子类中引用父类的成员,不能用于在父类中引用子类的成员。另外,super 关键字不能用于静态方法和静态代码块中,因为静态方法和静态代码块属于类级别,没有具体的对象实例。
三、this和super关键字的使用区别
this
关键字是用来引用当前对象的引用,而 super
关键字是用来引用父类对象的引用。
它们的使用区别如下,请同学们认真学习。
3.1 调用构造方法
- this 关键字用于调用本类中的其他构造方法,用于构造方法的重载或构造方法之间的调用。
- super 关键字用于调用父类的构造方法,用于子类构造方法中调用父类构造方法以完成父类的初始化。
以下是一个示例代码,请同学们复制到本地执行。
class Parent { private int age; public Parent(int age) { this.age = age; } } class Child extends Parent { private String name; public Child(int age, String name) { super(age); // 调用父类的构造方法 this.name = name; } }
3.2 引用成员变量和方法
- this 关键字用于引用当前对象的成员变量和方法。
- super 关键字用于引用父类的成员变量和方法。
以下是一个示例代码,请同学们复制到本地执行。
class Parent { protected int age; public void printAge() { System.out.println("Parent's age: " + age); } } class Child extends Parent { private int age; public Child(int age) { this.age = age; // 引用子类的age变量 super.age = age; // 引用父类的age变量 } public void printAge() { System.out.println("Child's age: " + age); // 引用子类的age变量 super.printAge(); // 调用父类的printAge方法 } }
在上述示例代码中,子类 Child
中有一个与父类 Parent
同名的成员变量 age
。通过 this 关键字和 super 关键字可以分别引用子类和父类的成员变量。
- 总结
- this 关键字用于引用当前对象的成员变量和方法,以及调用本类中的其他构造方法。
- super 关键字用于引用父类的成员变量和方法,以及调用父类的构造方法。
四、this、super面试题
一、this 关键字的作用是什么?举例说明。
答:this 关键字用于引用当前对象的引用,它主要有以下几个作用:
- 引用当前对象的成员变量和方法;
- 调用本类中的其他构造方法;
- 返回当前对象的引用。例如:
this.name
表示当前对象的name
成员变量。
二、super 关键字的作用是什么?举例说明。
答:super 关键字用于引用父类对象的引用,它主要有以下几个作用:
- 调用父类的构造方法;
- 引用父类的成员变量和方法。例如:
super.name
表示父类的name
成员变量。
三、this和super关键字的区别是什么?
答:this 关键字用于引用当前对象的引用,super 关键字用于引用父类对象的引用,具体区别如下。
- this 关键字用于引用当前类中的成员变量、方法和构造方法,而 super 关键字用于引用父类中的成员变量、方法和构造方法。
- this 关键字用于解决成员变量和局部变量同名的问题,而 super 关键字用于解决子类与父类成员变量或方法同名的问题。
- this 关键字只能在非静态的成员方法和构造方法中使用,而 super 关键字可以在子类的任意方法中使用。
四、当子类和父类有同名的成员变量时,如何使用 this 和 super 关键字区分?
答:当子类和父类有同名的成员变量时,可以使用 this
和 super
关键字来区分。
- 使用 this 关键字表示当前类的成员变量,例如:
this.name
表示子类的name成员变量。 - 使用 super 关键字表示父类的成员变量,例如:
super.name
表示父类的name成员变量。
五、this 和 super 关键字能否同时出现在一个构造方法中?
答:是的,this 和 super 关键字可以同时出现在一个构造方法中。例如,通过 this 关键字调用本类的其他构造方法,再通过 super 关键字调用父类的构造方法,实现构造方法之间的调用关系。例如:this(...)
和 super(...)
。
五、总结
本文讲解了 Java 中 this 和 super 关键字语法和应用场景,并给出了样例代码,在下一篇博客中,将讲解 Java 中构造函数语法和构造函数的优先级问题。