本文是《Java 入门指南》的第二十三篇文章,介绍了 Java 的 this 和 super。

this 关键字

描述:

this 表示本类,可以调用本类的属性和方法,没有使用限制。

this.propertyName 调用本类的属性,this.methodName() 调用本类的方法(this() 调用本类的构造方法)。

实例:

示例代码:

package com.jianrry.oop;

public class Cat {

    String name="Cat";

    public void intro(){

        System.out.println(this.name+" 是我的名字。");

    }

    public void say(){

        System.out.println(this.name+" 在说悄悄话。");

    }

    public void action(){

        this.say();

    }

}
package com.jianrry.oop;

public class Application {

    public static void main(String[] args) {

        Cat cat=new Cat();

        cat.intro();

        cat.action();

    }

}

运行结果:

Cat 是我的名字。
Cat 在说悄悄话。

super 关键字

描述:

super 表示父类,可以调用父类的非私有的属性和方法,只能在子类中使用。

super.propertyName 调用父类的非私有的属性,super.methodName() 父类的非私有的方法(super() 调用父类的构造方法)。

实例:

示例代码:

package com.jianrry.oop;

public class Animal {

    String name="Animal";

    public void say(){

        System.out.println(this.name+" 在说悄悄话。");

    }

}
package com.jianrry.oop;

public class Cat extends Animal {

    String name="Cat";

    public void intro(){

        System.out.println(super.name+" 是我的名字。");

    }

    public void action(){

        super.say();

    }

}
package com.jianrry.oop;

public class Application {

    public static void main(String[] args) {

        Cat cat=new Cat();

        cat.intro();

        cat.action();

    }

}

运行结果:

Animal 是我的名字。
Animal 在说悄悄话。

注意事项:

  1. 类在初始化时,会自动调用本类的构造方法(即 this())。如果该类是某个类的子类时,就会先调用父类的构造方法(即 super()),然后调用本类的构造方法(即 this())。
  2. 因为 this()super() 必须是构造方法中的第一条语句,所以同一个构造方法中只能存在一个 this()super() ,不能同时调用 this()super()