国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Java語言基礎:內部類

發布時間:2011-3-27 00:51    發布者:1770309616
關鍵詞: Java語言 , 內部類
1.  普通內部類
•普通內部類的一個最簡單的例子:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    // 內部類   
    public class InnerClass {   
        private int i = 0;   
        public int getInt(){   
            return i;   
        }   
    }   
    public void proc(){   
        InnerClass inClass = new InnerClass();   
        System.out.println(inClass.getInt());   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
        outClass.proc();   
    }   
}  
// 外部類
class OutterClass {
    // 內部類
    public class InnerClass {
        private int i = 0;
        public int getInt(){
            return i;
        }
    }
    public void proc(){
        InnerClass inClass = new InnerClass();
        System.out.println(inClass.getInt());
    }
}

public class Main {   
    public static void main(String[] args) {
        OutterClass outClass = new OutterClass();
        outClass.proc();
    }
}
•外部類可以訪問內部類的私有成員,內部類也可以訪問外部類的私有成員:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mOut = 10;   
    // 內部類   
    public class InnerClass {   
        private int mIn = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(mOut);   
        }   
    }   
    public void printInPrivate(){   
        InnerClass inClass = new InnerClass();   
        // 直接打印內部類的私有成員   
        System.out.println(inClass.mIn);   
    }   
    public void printOutPrivate(){   
        InnerClass inClass = new InnerClass();   
        inClass.printOutPrivate();   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
        outClass.printInPrivate();   
        outClass.printOutPrivate();   
    }   
}  
// 外部類
class OutterClass {
    private int mOut = 10;
    // 內部類
    public class InnerClass {
        private int mIn = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(mOut);
        }
    }
    public void printInPrivate(){
        InnerClass inClass = new InnerClass();
        // 直接打印內部類的私有成員
        System.out.println(inClass.mIn);
    }
    public void printOutPrivate(){
        InnerClass inClass = new InnerClass();
        inClass.printOutPrivate();
    }
}

public class Main {   
    public static void main(String[] args) {
        OutterClass outClass = new OutterClass();
        outClass.printInPrivate();
        outClass.printOutPrivate();
    }
}
•如果外部類的成員變量與內部類的成員變量名字相同,當內部類要訪問外部類的該成員時,可以使用“OutClass.this.mem”來區分:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 10;   
    // 內部類   
    public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(OutterClass.this.mMem);   
        }   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 10;
    // 內部類
    public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(OutterClass.this.mMem);
        }
    }
}
•要創建普通內部類,必須先創建相應的外部類:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 10;   
    // 內部類   
    public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(OutterClass.this.mMem);   
        }   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
       OutterClass.InnerClass inClass = outClass.new InnerClass();   
        inClass.printOutPrivate();   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 10;
    // 內部類
    public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(OutterClass.this.mMem);
        }
    }
}

public class Main {   
    public static void main(String[] args) {
        OutterClass outClass = new OutterClass();
       OutterClass.InnerClass inClass = outClass.new InnerClass();
        inClass.printOutPrivate();
    }
}
也可以用下面的方式:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 10;   
    // 內部類   
    public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(OutterClass.this.mMem);   
        }   
    }   
    public InnerClass newInnerClass() {   
        return new InnerClass();   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
       OutterClass.InnerClass inClass = outClass.newInnerClass();   
        inClass.printOutPrivate();   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 10;
    // 內部類
    public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(OutterClass.this.mMem);
        }
    }
    public InnerClass newInnerClass() {
        return new InnerClass();
    }
}

public class Main {   
    public static void main(String[] args) {
        OutterClass outClass = new OutterClass();
       OutterClass.InnerClass inClass = outClass.newInnerClass();
        inClass.printOutPrivate();
    }
}
2.  靜態內部類
普通內部類前面加上static修飾符,就成為靜態內部類,靜態內部類類似于C++的嵌套類,與普通內部類相比有如下區別:
•靜態內部類沒有指向外部類的引用,外部類對于它來說更像一個名字空間。
•普通內部類不能有靜態成員,靜態方法,或另一個靜態內部類;而靜態內部類可以有這一切。
•靜態內部類可以直接創建,不必先創建外部類:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 0;   
    // 靜態內部類   
    static public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 這是錯誤的   
            // System.out.println(OutterClass.this.mMem);   
        }   
    }   
    public void printInPrivate() {   
        InnerClass inClass = new InnerClass();   
        // 可以直接訪問靜態內部類的成員   
        System.out.println(inClass.mMem);   
    }   
}   
public class Main {      
    public static void main(String[] args) {   
        // 直接創建靜態內部類   
        OutterClass.InnerClass inClass = new OutterClass.InnerClass();   
        inClass.printOutPrivate();   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 0;
    // 靜態內部類
    static public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 這是錯誤的
            // System.out.println(OutterClass.this.mMem);
        }
    }
    public void printInPrivate() {
        InnerClass inClass = new InnerClass();
        // 可以直接訪問靜態內部類的成員
        System.out.println(inClass.mMem);
    }
}
public class Main {   
    public static void main(String[] args) {
        // 直接創建靜態內部類
        OutterClass.InnerClass inClass = new OutterClass.InnerClass();
        inClass.printOutPrivate();
    }
}
從上面描述可以看出,靜態內部類與一般類沒有太大區別,只不過它是放在一個類的里面,這個類相當于它的名字空間,可以防止命名沖突。
3.  局部內部類
Java可以把一個類定義在一個方法里面,甚至是一個{}塊里面,它的作用域就在這個塊里面:

view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    public void testLocalInner() {   
        if (true)   
        {   
            class LocalInner {   
                public void proc() {   
                    System.out.println("hello");   
                }   
            }   
            // 可以創建使用   
            LocalInner localInner = new LocalInner();   
            localInner.proc();   
        }   
        // 錯誤:超出類定義的作用域   
        LocalInner localInner = new LocalInner();   
        localInner.proc();   
    }   
}  
// 外部類
class OutterClass {
    public void testLocalInner() {
        if (true)
        {
            class LocalInner {
                public void proc() {
                    System.out.println("hello");
                }
            }
            // 可以創建使用
            LocalInner localInner = new LocalInner();
            localInner.proc();
        }
        // 錯誤:超出類定義的作用域
        LocalInner localInner = new LocalInner();
        localInner.proc();
    }
}
局部內部類的一般用途是實現某個接口,并作為這個接口傳出方法被使用:

view plaincopy to clipboardprint?
// 接口   
interface Talker {   
    public void Talk();   
}   
   
// 外部類   
class OutterClass {   
    public Talker getTalker() {   
        // 現實該接口的局部內部類   
        class SomeTalker implements Talker {   
            public void Talk() {   
                System.out.println("hello");   
            }   
        }   
        // 創建類實例并作為Talker返回   
        SomeTalker talker = new SomeTalker();   
        return talker;   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
        Talker talker = outClass.getTalker();   
        talker.Talk();   
    }   
}  
// 接口
interface Talker {
    public void Talk();
}

// 外部類
class OutterClass {
    public Talker getTalker() {
        // 現實該接口的局部內部類
        class SomeTalker implements Talker {
            public void Talk() {
                System.out.println("hello");
            }
        }
        // 創建類實例并作為Talker返回
        SomeTalker talker = new SomeTalker();
        return talker;
    }
}

public class Main {   
    public static void main(String[] args) {
        OutterClass outClass = new OutterClass();
        Talker talker = outClass.getTalker();
        talker.Talk();
    }
}
4.  匿名內部類
匿名內部類的語法如下:

view plaincopy to clipboardprint?
new InterfaceName(){......}; 或 new SuperclassName(){......};   
new InterfaceName(){......}; 或 new SuperclassName(){......};  

它被認為是InterfaceName的實現者,或是SuperclassName的繼承類,匿名內部類沒有構建函數,如果SuperclassName有帶參數的構造函數,必須在創建匿名內部類時帶上這些參數,下面是匿名內部類最常見的使用場合:

view plaincopy to clipboardprint?
// 接口   
interface Talker {   
    public void Talk();   
}   
   
// 外部類   
class OutterClass {   
    public void Talk(Talker talker) {   
        talker.Talk();   
    }   
}   
   
public class Main {      
    public static void main(String[] args) {   
        OutterClass outClass = new OutterClass();   
        // 直接生成一個匿名內部類   
        outClass.Talk(new Talker(){   
            public void Talk() {   
                System.out.println("hello");   
            }   
        });   
    }   
}
本文地址:http://m.qingdxww.cn/thread-60025-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区不卡在线 | 久久免费观看国产精品 | 国产成人精品综合久久久 | 依依成人综合网 | 日韩新片在线观看 | 羞羞视频免费网站欧美 | 成人亚洲欧美日韩在线 | 国产欧美亚洲精品第二区首页 | 国产成人精品一区二区不卡 | 久久精品欧美一区二区 | 亚洲 欧美 卡通 在线 另类 | 日韩免费一级片 | 国产精品第一页在线 | 91亚洲精品在看在线观看高清 | 免费观看欧美大片 | www天堂网 | 久久成年人视频 | 五月天淫 | 日韩毛片在线观看 | 99精品视频在线免费观看 | 日韩黄色一级大片 | 996免费视频国产在线播放 | 国产精品高清视亚洲一区二区 | 日本一区二区三区在线 视频 | 香蕉97超级碰碰碰碰碰久 | 国产高清a | 精品在线观看国产 | 国产欧美在线观看一区二区 | 97麻豆精品国产自产在线观看 | 国产精品无 | 日韩中文字幕精品视频在线 | 欧美成人观看免费完全 | 国产成人青青热久免费精品 | 99国产精品 | 亚洲精品一 | 精品久久久久久综合网 | 亚洲最新视频在线观看 | 青青青视频精品中文字幕 | 四虎永久在线精品波多野结衣 | 亚洲欧美日韩高清 | 国产精品入口免费麻豆 |