> 文档中心 > Java:this和super关键字(详解)

Java:this和super关键字(详解)

this和super的区别


super:

super 代表父类对象的引用
super() 调用父类的构造方法
super.data 调用父类的属性
super.func() 调用父类的成员方法

this:

this 代表当前对象的引用
this() 调用当前对象的构造方法
this.data 调用当前对象的属性
this.fun() 调用当前对象的成员方法

super: VS this:

super指代的是父类,和this指代的本类相对应

前提:
this:没有继承也可以使用.

super: 只能在继承条件下才能使用.

注意点:

  1. super()和this(),必须在构造方法的首行.
  2. super只能出现在子类的方法或者构造方法中.
  3. super和this不能同时调用构造方法,会有冲突.是super()和this()不能同时出现
  4. this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。

private修饰的方法和属性无法被继承.
子类代码存在隐藏默认构造器,即调用父类的构造器。若父类构造器未被很好的定义,则子类无法定义构造器, 但是也可以通过get和set方法操作.

下面我们看一个示例:

class Person {//父类 public Person() {    //父类的无参数构造方法(构造方法也称构造器)     System.out.println("Person没有参数的构造方法"); } protected String name = "DlAM";   //父类的受保护的属性(可以被子类访问) public void print() {      //父类的方法     System.out.println("Person"); }    } class Student extends Person {    //子类继承父类 private String name = "朵啦";    //子类的属性 public Student() {     //子类的构造方法     //隐藏代码:调用父类的无参构造方法     //super(); 调用父类构造方法时必须在子类构造方法首行     System.out.println("Student没有参数构造方法"); } public void print() {    //子类的方法     System.out.println("Student"); } public void test(String name) {     System.out.println(name);     System.out.println(this.name);     //引用本类     System.out.println(super.name);    //引用父类 } public void test1() {     print();     this.print();    //引用本类     super.print();   //引用父类 }    }    public class Test { public static void main(String[] args) {     Student student1 = new Student();     student1.test("朵啦爱萌");     student1.test1(); }    }

运行结果:
Java:this和super关键字(详解)


简单介绍下set和get:
set是设置,而get是获取,这两个方法是对数据进行设置和获取用的。而且,在类中使用set和get方法时,都是在set和get后面跟上一些特定的词来形成特定意思的方法名,比如set xxx()get xxx(),表示设置xxx和获取xxx。

参考示例:
public修饰

class Person{    public int age ; // 声明年龄属性    public void tell(){ System.out.println("年龄:" + this.age);    }}public class Test{    public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象 per.age = 30;     //设置年龄 per.tell() ;      // 输出信息    }}

运行结果:
Java:this和super关键字(详解)


private修饰

class Person{    private int age ; // 声明年龄属性 public void tell(){     System.out.println("年龄:" + this.age);    }}public class Test{    public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象  per.age = 30;     //设置年龄 per.tell() ;      // 输出信息    }}

运行结果:
Java:this和super关键字(详解)
使用set和get

class Person{    private int age ; // 声明年龄属性    public void setAge(int a){      // 设置年龄 age = a ;    }    public int getAge(){     // 取得年龄 return age ;    }    public void tell(){      System.out.println( "年龄:" + this.getAge()) ;    }}public class Test{    public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象 per.setAge(30) ;    // 调用set设置年龄 per.tell() ;  // 输出信息    }}

运行结果:
Java:this和super关键字(详解)