Java中關鍵詞之this,super的使用

一.this關鍵詞介紹.java

說明:該知識點僅僅限於本人對其瞭解的範圍.oop

package com.study.java.oop;
  • 核心點:"this是指向對象自己的一個指針"
  • 出現的位置: 只能用於方法的方法體內(且該方法是隻能是類中的非靜態方法)
  • 靜態方法和靜態塊中絕對不可以使用
  • 使用的方式:
  • this(參數) >>> 調用的是類的構造方法 有參數調用的是 有參構造 無參 調用無參構造
  • this.成員變量名 >>>調用類 的成員變量
  • @author ys.zhangjy
public class StudyOop02 {
private String username;
private String password;
private int number;
private int x;

public StudyOop02(){
this("空","空",20);//經過this()調用 構造方法

}

public StudyOop02(String username,String ps,int x){
this.username = username;// this.成員變量名 調用類的成員變量
this.password = ps;
this.x = x;
//System.out.println(username+"=="+password+"=="+x);
}

public StudyOop02(String username,int x){
this(username,"2個參數",x);
}

public void outprint(StudyOop02 s){
System.out.println("---------------");
System.out.println(s.username);
System.out.println(s.password);
System.out.println(s.number);
System.out.println(s.x);
System.out.println("---------------");
f();//寫成 this.f() >>> 調用方法

}

private void f() {
int x = 200;



x = this.x++;
System.out.println("成員變量x的值: "+this.x+" 局部變量x的值: "+x);
//加入Java開發交流君樣:756584822一塊兒吹水聊天

}

局部變量和成員變量 同名 this.變量名 調用類 的成員變量和方法this

  • 同時 有一個區分的效果
public StudyOop02(String username, String passwrd, int number, int x) {
super();
this.username = username;
this.password = passwrd;
this.number = number;
this.x = x;
}

public static void main(String[] args) {
StudyOop02 s1 = new StudyOop02();
StudyOop02 s2 = new StudyOop02("小馬甲",23);
s1.outprint(s1);
s2.outprint(s2);
/** 報錯 this 不能在靜態方法 中 使用**/ 
//System.out.println(this.username = "2222222");

}

/**
* 報錯 this 不能在靜態塊 中使用
*/
/*static{
this.username = "xxx ";
this.password = "1111";
this.number = "11111";
this.x = 200000;
}*/
//加入Java開發交流君樣:756584822一塊兒吹水聊天
}

運行結果:指針

---------------
空
空
0
20
---------------

成員變量x的值: 21 局部變量x的值: 20code

小馬甲
2個參數
0
23
---------------

成員變量x的值: 24 局部變量x的值: 23對象

二.super 關鍵詞使用.開發

父類:Fatherclass

package com.study.java.oop;

/**
* 出現的位置:子類中
* 使用 方式:子類中使用 核心點:子類在構造以前一定先構造父類 且super關鍵詞只能出如今子類構造的第一行
* super.變量名 >>> 調用的是 父類中成員變量
* super.方法名 >>> 調用的是 父類中方法
* super(參數) >>> 調用父類的構造方法 有參調有參 無參調無參 
* @author ys.zhangjy
*
*/
public class Father {
private String name ;
private String job;
private int age;
public String s = "父類中的變量";

public Father(){
System.out.println("父類無參構造被調用");
}

public Father(String name,String job,int age){
super();
this.name = name;
this.job = job;
this.age = age;

}

public void test(){
System.out.println("super.方法名 >>> 調用的是父類中的方法");
}
//加入Java開發交流君樣:756584822一塊兒吹水聊天
public void play(){

System.out.println("調用父類的play()方法");

}
}

子類:Subtest

package com.study.java.oop;

public class Sub extends Father{
private String name ;
private String job;
private int age;
public String s = "子類中的成員變量";
public Sub(){
super();//加入Java開發交流君樣:756584822一塊兒吹水聊天
System.out.println("子類無參構造被調用");
//super("小明","xiaoshou",20); 報錯 說明super關鍵詞只能出如今子類構造的第一行
}

public Sub(String name,String job,int age){
super("小明","xiaoshou",20);
System.out.println("子類有參構造被調用");
}

public void play(){
System.out.println("調用父類中的成員變量:"+super.s);
System.out.println("調用子類的play()方法");
super.test();
}

public void test(){
System.out.println("子類中的 方法");
}

public static void main(String[] args) {
Sub s = new Sub();
s.play();
//加入Java開發交流君樣:756584822一塊兒吹水聊天
}

}

運行結果:變量

父類無參構造被調用
子類無參構造被調用
調用父類中的成員變量:父類中的變量
調用子類的play()方法
super.方法名 >>> 調用的是父類中的方法

說明:

  • [1 ] 在子類構造方法中要調用父類的構造方法,用「super(參數列表)」的方式調用,參數不是必須的。同時還要注意的一點是:「super(參數列表)」這條語句只能用在子類構造方法體中的第一行。
  • [ 2] 當子類方法中的局部變量或者子類的成員變量與父類成員變量同名時,也就是子類局部變量覆蓋父類成員變量時,用「super.成員變量名」來引用父類成員變量。固然,若是父類的成員變量沒有被覆蓋,也能夠用「super.成員變量名」來引用父類成員變量,不過這是沒必要要的。
  • [3 ] 當子類的成員方法覆蓋了父類的成員方法時,也就是子類和父類有徹底相同的方法定義(但方法體能夠不一樣),此時,用「super.方法名(參數列表)」的方式訪問父類的方法。
相關文章
相關標籤/搜索