首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java this 與 super 關鍵字詳解

     編輯:Java 程式設計入門

前言

this 和 super 是 Java 中兩個重要的引用關鍵字,分別用於引用當前對象和父類對象。理解它們的用法對於掌握繼承、多態、構造器鏈至關重要。

一、super 關鍵字

super 指向當前對象的父類(超類)引用,主要用途:

  1. 訪問父類被隱藏的成員變量:當子類定義了與父類同名的字段時,用 super.field 訪問父類字段。
  2. 調用父類被覆蓋的方法:用 super.method() 調用父類實現。
  3. 在子類構造器中調用父類構造器:super(...) 必須是構造器第一條語句。

示例:訪問父類字段與方法

class FatherClass {
    public int value = 100;
    public void f() {
        value = 100;
        System.out.println("FatherClass.value=" + value);
    }
}

class ChildClass extends FatherClass {
    public int value = 200; // 隱藏父類 value
    public void f() {
        super.f();          // 調用父類 f()
        value = 200;
        System.out.println("ChildClass.value=" + value);
        System.out.println(value);      // 200(子類)
        System.out.println(super.value); // 100(父類)
    }
}

public class TestInherit {
    public static void main(String[] args) {
        ChildClass cc = new ChildClass();
        cc.f();
    }
}

輸出:

FatherClass.value=100
ChildClass.value=200
200
100

二、this 關鍵字

this 代表當前對象的引用,主要用途:

  1. 區分同名參數與成員變量:構造器或方法參數與字段同名時,用 this.field 指代字段。
  2. 在構造器間調用:this(...) 調用本類其他構造器,必須為第一條語句。
  3. 返回當前對象:實現鏈式調用(Builder 模式常用)。
  4. 作為參數傳遞:將當前對象傳給其他方法。

示例:區分參數與字段

public class DotLoc {
    double X, Y, Z;

    // 參數與字段不同名,無需 this
    public DotLoc(double XX, double YY, double ZZ) {
        X = XX; Y = YY; Z = ZZ;
    }

    // 參數與字段同名,必須用 this 區分
    public DotLoc(double X, double Y, double Z) {
        this.X = X; this.Y = Y; this.Z = Z;
    }
}

示例:構造器鏈調用

public class Person {
    String name;
    int age;

    public Person(String name) {
        this.name = name;
    }

    public Person(String name, int age) {
        this(name); // 調用單參構造器
        this.age = age;
    }
}

三、this 與 super 的區別總結

特性thissuper
指向當前對象父類對象(當前對象的父類部分)
訪問字段本類字段(含繼承來的)父類被隱藏的字段
調用方法本類方法(含繼承、覆蓋後的)父類被覆蓋的方法
構造器調用this(...) 調用本類其他構造器super(...) 調用父類構造器
可用位置非靜態上下文(方法、構造器、實例初始化塊)非靜態上下文
靜態方法中不可用不可用

四、常見誤區

  • 構造器中同時使用 this() 和 super():不可同時出現,因為兩者都必須是第一條語句。若不寫 super(),編譯器默認插入無參 super();若寫了 this(),則由被調用構造器負責調用 super()。
  • super.super.method():非法,只能訪問直接父類。
  • 靜態方法中使用:編譯錯誤,因為靜態方法無 this 引用。

總結

this 用於當前對象內部引用,解決同名遮蔽、構造器復用、鏈式調用;super 用於子類訪問父類被隱藏/覆蓋的成員,維繫繼承鏈。熟練掌握二者是編寫清晰、正確面向對象代碼的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved