<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 變量遮蓋 > 原文: [https://javabeginnerstutorial.com/core-java-tutorial/variable-shadowing/](https://javabeginnerstutorial.com/core-java-tutorial/variable-shadowing/) 今天,我們將探討 Java 的一項罕見功能:**變量遮蓋** 首先,讓我們定義什么是遮蓋字段或方法: 當**被遮蓋**時,該字段被視為 * 其聲明類的子類聲明一個具有**同名**的字段 * 在本地范圍內聲明具有相同名稱和類型的變量 * 用相同名稱和類型聲明方法參數/參數 ## 局部變量遮蓋 ```java public class MyClass { private int count = 10; private void localVariable() { int count = 5; System.out.println("count = "+ count); } public static void main(String[] args) { MyClass test = new MyClass(); test.localVariable(); } } ``` 上面的代碼將輸出 > `count=5` 因為在**第 7 行**中聲明的`count`**局部變量**遮蓋了在類級別聲明的變量*計數*。 如果要訪問實例變量,則需要添加`this`關鍵字。 ```java private void localVariable() { int count = 5; System.out.println("count = "+ this.count); } ``` ## 方法參數遮蓋 即使我們對此不太關注,這種情況也很常見。 下面是一個簡單的獲取器定義 ```java private int count; public void setCount(int count) { this.count = count; } ``` `this`關鍵字是解決歧義所必需的。 如果沒有`this`,編譯器將無法知道我們是否要為其自身分配*計數*方法參數值。 如果刪除`this`關鍵字,則仍然會收到編譯警告。 ## 超類字段遮蓋 讓我們考慮以下類: ```java public class SuperClass { protected String val = "SUPER_VAL"; protected void display() { System.out.println("val = "+this.val); } } public class ChildClass extends SuperClass { private String val; public ChildClass(String value) { this.val = value; } public static void main(String[] args) { ChildClass child = new ChildClass("CHILD_VAL"); child.display(); } } ``` 執行給出: > `value = SUPER_VAL` 在`SuperClass`中聲明了`val`字段,但在`ChildClass`中被遮蓋了,因為后者聲明了另一個具有相同**名稱和類型**的字段。 盡管已使用`CHILD_VAL`實例化了`ChildClass`,但執行`child.display()`卻給您`SUPER_VAL`。 原因很簡單。 創建子實例時,有 2 個變量`val`。 通過構造器,來自`SuperClass`的一個具有值`SUPER_VAL`,來自`ChildClass`的一個具有注入值`CHILD_VAL`。 調用`display()`方法時,由于它是在**超類**中定義的,因此它是超類的**上下文**中的`val`字段。輸出顯示`SUPER_VAL`也就不足為奇了。 ```java public class ChildClass extends SuperClass { private String val; public ChildClass(String value) { this.val = value; super.val = value; } public static void main(String[] args) { ChildClass child = new ChildClass("CHILD_VAL"); child.display(); } } ``` 在上面修改的代碼中,我們將`SuperClass`中隱藏的`val`字段的值強制為`super.val = value`,輸出給出: > `value = CHILD_VAL` 現在讓我們在層次結構中添加另一個類 ```java public class AncestorClass { protected String val = "ANCESTOR_VAL"; } public class SuperClass extends AncestorClass { protected String val = "SUPER_VAL"; } public class ChildClass extends SuperClass { private String val = "CHILD_VAL"; public void displayVal() { System.out.println("val = " + super.val); } public static void main(String[] args) { ChildClass child = new ChildClass(); child.displayVal(); } } ``` 顯然,輸出將顯示 > `val = SUPER_VAL` 現在的問題是:如果要顯示祖先類的`val`值,該怎么辦? 顯然,僅`super`關鍵字引用了類層次結構中的第一個父類。 救援人員來了。 實際上,我們可以將代表當前類實例的**關鍵字強制**應用于類層次結構中的特定類型! ```java public class ChildClass extends SuperClass { private String val = "CHILD_VAL"; public void displayVal() { System.out.println("val = " + ((AncestorClass) this).val); } public static void main(String[] args) { ChildClass child = new ChildClass(); child.displayVal(); } } ``` 這次,我們確實有 > val = ANCESTOR_VAL
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看