Java解惑七:很多其它類之謎

來源:互聯網
上載者:User

標籤:

謎題66
繼承的問題。
對於執行個體方法:命名同樣時,子類會覆寫父類的方法,且訪問許可權至少和父類一樣大。
對於域:命名同樣時,子類會隱藏父類的域,且訪問許可權隨意。
謎題67
不要重用庫中的類名。
謎題68
命名的問題。
類名應該以大寫字母開頭,形式為:MixedCase。
變數以小寫字母開頭,形式為:mixedCase。
常量以大寫字母開頭,形式為:MIXED_CASE。
單個大寫字母,僅僅能用於類型參數,形式為:Map<K, V>。
包名應該都是小寫,形式為:lower.case。
當一個變數和一個類型具有同樣的名字,而且作用於同樣的範圍時,變數名具有優先權。
即:變數名遮掩(obscure)類型名。相同變數名和類型名能夠遮掩包名。
class X {static class Y {static String Z = "Black";}static C Y = new C();}class C {String Z = "White";}public class ShadesOfGray {public static void main(String[] args) {System.out.println(X.Y.Z); //輸出結果是:White}}
謎題69
怎樣引用上題中的被遮掩的類型名。技巧在某一種特殊的文法上下文環境中使用該名字,文法上下文環境同意出現一個類型名可是不同意出現變數。技巧一
<span style="font-size:18px;">System.out.println(((X.Y)null).Z);</span>
技巧二
<span style="font-size:18px;">static class Xy extends X.Y{};System.out.println(Xy.Z);</span>
技巧三: 5.0版本號碼之後
<span style="font-size:18px;">public static <T extends X.Y> void main(String[] args) {       System.out.println(T.Z);}</span>
謎題70
具有包內訪問許可權修飾的方法的類,在其它包內被繼承時,該方法不可能被覆寫。
即使是方法名同樣,也是兩個不同的方法。
謎題71
名字重用導致遮蔽(shade):一個聲明僅僅能遮蔽類型同樣的還有一個聲明。靜態匯入Arrays.toString,當在類中使用toString()時,會調用Object類中的toString方法。
謎題72
名字重用的問題。
final修飾符
對於方法:執行個體方法不能覆寫,靜態方法不能隱藏。
對於域:不能被賦值超過一次。因此能夠被隱藏。
謎題73
遮蔽:被遮蔽類型能夠來自外圍類,而不是來自庫。
隱藏:本來調用的父類的變數,結果聲明了一個同名的私人的變數。
謎題74
重載方法要確定全部的重載版本號碼一致。
謎題75
版本號碼升級後帶來的不一致,瞭解就可以。
名字重用術語表
覆寫(override)一個執行個體方法能夠覆寫(override)在其超類中可訪問大的具有同樣簽名的全部執行個體方法,從而能動態指派,,VM將基於執行個體執行期類型來選擇要調用的覆寫方法。
class Base {     public void f(){}}class Derived extends Base {    public void f() {} //override Base.f()}
重載(overload)同一個類中,方法名同樣,簽名不同。重載的方法是編譯期選定的
class A {     public void f (int i){}     public void f (String s)  {}}
隱藏(hide)子類中的一個域、靜態方法或成員類型能夠隱藏超類中可訪問到具有同名的全部與、靜態方法或成員類型。隱藏一個成員將阻止其被繼承。
class Base {     public static void f() {}}class Derived extends Base {     public static void f() {}}
遮蔽(shadow)變數、方法或類型能夠遮蔽文本範圍內具有同樣名字的全部變數、方法、或類型。
class WhoKnows {      static Stirng sentence = "I do not know";        public static void main(String [] args) {              String sentence = "i know"; //shadow static field               system.out.println(sentence);         }}
遮掩(obscure)變數能夠遮掩同一範圍內同樣名字的類型,變數或者類型能夠遮掩一個包。
public class Obscure {    static String System; //Obscures type java.lang.System    public static void main(String[] args) {     System.out.println("hello"); //won't compile    }}

Java解惑七:很多其它類之謎

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.