為什麼Java的靜態變數繼承會產生意想不到的結果?
Java 類別變數覆蓋難題
考慮以下 Java程式碼片段:
<br>class爸爸{<pre class="brush:php;toolbar:false">protected static String me = "dad"; public void printMe() { System.out.println(me); }
登入後複製
}
class Son 擴充了爸爸{
protected static String me = "son";
登入後複製
}
} public void doIt() {new Son().printMe();
登入後複製
}
為什麼「doIt()」會印「dad」?
在 Java 中,類別變數不能被覆寫。相反,它們是隱藏的。具體來說,當在子類別中宣告具有現有名稱的類別變數時,子類別會隱藏繼承的類別變量,從而有效地建立一個與其父類別同名但不同的新類別變數。重寫與隱藏
覆蓋涉及為子類中的方法提供不同的實現,以覆蓋超類中的方法。相較之下,隱藏涉及在子類別中使用相同的變數名,但它隱藏了從超類別繼承的變量,並在子類別中本地創建一個新變數。如何列印「son」?
為了實現列印「son」的所需行為,不能覆寫類別變數。相反,可以使用其他繼承技術,例如:- 在子類別中使用不同的變數名稱,例如“myName”而不是“me”。
- 修改繼承的類別使用反射的變數(不建議一般使用此方法)。
- 將數值作為建構子參數傳遞,如範例所示:
有建構子參數的範例:
private String name; public Person(String name) { this.name = name; } public void printName() { System.out.println(name); }
登入後複製
}
以上是為什麼Java的靜態變數繼承會產生意想不到的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
如何修復KB5055523無法在Windows 11中安裝?
3 週前
By DDD
如何修復KB5055518無法在Windows 10中安裝?
3 週前
By DDD
<🎜>:死鐵路 - 如何馴服狼
4 週前
By DDD
R.E.P.O.的每個敵人和怪物的力量水平
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
<🎜>:種植花園 - 完整的突變指南
2 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
