理解 java 內部類

來源:互聯網
上載者:User

1、內部類基礎知識:

一般定義在java類內部的類成為內部類

內部類可以分為:定義在方法體外部的類、定義方法內部的類、靜態內部類(只能定義在方法外部),匿名內部類

說明:

定義在方法外面的類:

類的成員變數(靜態、非靜態)可以訪問,為了保證能夠正確的引用的類的成員變數,所以必須先執行個體化外部類的對象,才可以執行個體化內部類的對象

存取權限可以任何,可以把它看成類的成員變數,這樣理解就好多來了。

定義在方法體內的類;

類的成員變數(靜態、非靜態)可以訪問,為了保證能夠正確的引用的類的成員變數,所以必須先執行個體化外部類的對象,才可以執行個體化內部類的對象

存取權限不可以有,把他看成方法的局部變數就可以了。

靜態內部類:

只能訪問類的靜態成員變數

存取權限任何

匿名內部類:

類的成員變數(靜態、非靜態)可以訪問,為了保證能夠正確的引用的類的成員變數,所以必須先執行個體化外部類的對象,才可以執行個體化內部類的對象

存取權限不可以有

2、內部類的作用

內部類可以很好的隱藏類,一般類不允許有private protect default存取權限。

內部類可以實現多重繼承,彌補了java不能多繼承的特點

3、例子

package com.ajun.test.innerclass.example;/** * 水果內容 * @author Administrator * */public interface Contents { String value();}

package com.ajun.test.innerclass.example;/** * 水果目的地 * @author Administrator * */public interface Destination {//目的地String readLabel();}

package com.ajun.test.innerclass.example;public class Goods {private String des="is ruit!!";//方法外部private class Content implements Contents{    private String name = "apple "+des;@Overridepublic String value() {return name;}}//方法外部private class GDestination implements Destination{private String label ;private GDestination(String label){this.label= label;}@Overridepublic String readLabel() {return label;}}//匿名內部類public Destination getdestination(final String label){return new Destination(){@Overridepublic String readLabel() {return label;}};}public Destination dest(String s){return new GDestination(s);}public Contents  content(){return new Content();}public Destination dest2(String s){class GDestination implements Destination{private String label;private GDestination(String label){this.label= label;}@Overridepublic String readLabel() {return label;}}return new GDestination(s);   }}

package com.ajun.test.innerclass.example;public class Test {public static void main(String [] a){Goods gs = new Goods();Contents c = gs.content();Destination d = gs.dest("Beijing");System.out.println(c.value());System.out.println(d.readLabel());Destination d1 = gs.getdestination("Shanghai");System.out.println(d1.readLabel());System.out.println(gs.dest2("Tianjin").readLabel());}}

其中Content和Gdestination得到了很好的隱藏,外面調用的時候,根本就不知道調用的是具體哪個類,使這個類擁有多繼承的特性。

輸出;

apple is ruit!!BeijingShanghaiTianjin

聯繫我們

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