Java-InnerClass-02

來源:互聯網
上載者:User
 Java內建了很好的隱藏機制:只給予某個類"包訪問權"(僅在同一個包內可見),而用不著把類建立為內部類.
 當將內部類向上轉型為其基類,尤其轉型為一個介面的時候,內部類就有了用武之地.
 從實現了某個介面的對象,得到對此介面的引用,與向上轉型為這個對象的基類,實質上效果是一樣的.
 這是因為此內部類(某個介面的實現)對於其他人來說能夠完全不可見(而不只是包外不可見)且不可用.所得到的只是指向基類or介面的引用,所以能夠很方便的隱藏實現細節.class Parcel_Upcast...{
    private class Pcontents implements Contents...{
        private int value;
        private Pcontents(int value)...{
            this.value = value;
        }
        public int readValue()...{
            return value;
        }
    }
    private class Pdestination implements Destination...{
        private String label;
        private Pdestination(String toWhere)...{
            label = toWhere;
        }
        public String readLabel()...{
            return label;
        }
    }
    public Contents getContents(int value)...{
        return new Pcontents(value);
    }
    /**//*傳回型別最好設定為基類or介面,名稱get基類,return的是內部類就ok了.這可以理解為是一種規範.*/
    public Destination getDestination(String label)...{
        return new Pdestination(label);
    }
}

main方法必須在一個獨立的類中,才能示範出私人內部類的性質
private內部類給類的設計者提供了一種途徑,通過這種方式可以完全阻止任何依賴於類型的編碼,並且完全隱藏了實現的細節.
從用戶端程式員的角度看,由於不能訪問任何新增加的,原來不屬於公用介面的方法,所以擴充介面是沒有價值的.這給編譯器提供了產生更高效代碼的機會.
普通的(非內部的)類,不能申明為private和protected,它們只可以被賦予public或者包訪問權.class TestParcel_Upcast...{
    public static void main(String[] args) ...{
        Parcel_Upcast par = new Parcel_Upcast();
        Contents con = par.getContents(20);
        Destination des = par.getDestination("NanJing");
    }
}
/**//*重名問題*/
class Outer1...{
    private int size;
    class Inner...{
        private int size;
        public void doStuff(int size)...{
            size++;//引用的是doStuff函數的形參
            this.size++;//引用的是Inner類中的成員變數
            Outer1.this.size++;//引用的是Outer1類中的成員變數
        }
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.