this关键字 this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法。
- this . 属性 (区别成员变量和局部变量)
- this . () (调用本类的某个方法)
- this . () (调用本类构造方法,只能用在构造方法的第一行)
- this关键字只能出现在非static修饰的代码中
class Person {
private String name;
private int age;
private String sex;
public Person() {
this("小bit~", 22, "woman");
}
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void show() {
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();
person.show();
}
// 执行结果 name: 小bit~ age: 22 sex: woman
super 关键字 如果需要在子类内部调用父类方法怎么办? 可以使用super 关键字。
- super 表示父类对象
- super . 属性 (表示父类对象中的成员变量)
- super . 方法(表好似调用父类构造方法)
- super只能用在构造方法的第一行
super 表示获取到父类实例的引用. 涉及到两种常见用法:
- 使用了 super 来调用父类的构造器
public Bird(String name) {
super(name);
}
- 使用 super 来调用父类的普通方法
public class Bird extends Animal {
public Bird(String name) {
super(name);
}
@Override
public void eat(String food) {
super.eat(food);
System.out.println("我是一只小鸟");
System.out.println(this.name + "正在吃" + food);
}
}
在这个代码中, 如果在子类的 eat 方法中直接调用 eat (不加super), 那么此时就认为是调用子类自己的 eat (也就是递归了). 而加上 super 关键字, 才是调用父类的方法 注意:
- 如果this和super只带构造方法,则必须放在方法体第一行。即this和super在一个方法体中只能出现一个,并且只能出现一次,否则在实例化对象时,会因为子类调用多个构造方法而造成混乱。
- 由于this和super都在实例化阶段调用,所以不能在静态方法和静态代码块中使用this和super关键字。
|