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

Java語言基礎:內部類

發布時間:2011-3-29 20:05    發布者:1770309616
Java語言基礎.pdf (205.39 KB)


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");   
            }   
        });   
    }   
}  
// 接口
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-60391-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 污片在线免费观看| 色一情一乱一伦一区二区三区| 1973性农场未删减版| 国产成人亚洲综合无| 妹妹的第一次有点紧| 亚洲合集综合久久性色| 色图综合| 色综合久久天天综线观看| 日韩怡红院| 青青草亚洲| 午夜视频欧美| 五月天丁香婷婷开心激情五月| 在线欧美playboy| 国产亚洲精品看片在线观看| 日韩精品一区VR观看| 亚洲精品宾馆在线精品酒店| 亚洲美女视频网站| 天天操天天操天天干| 深夜男人网站| 在线 中文 观看 亚洲 自拍| 国产叼嘿久久精品久久| 日日噜噜夜夜狠狠扒开双腿| 国产成人午夜精品免费视频| 无罩看奶禁18| 亚洲一级片免费看| 日本成人在线网站| 一级一片一a一片| 亚洲午夜精品一区二区| 俄罗斯乌克兰战争原因| 色即是空之甜性涩爱| 亚洲国产字幕| 日日夜夜天天干干| 思思九九| 337p啪啪人体大胆| 两个人看的www免费高清直播| 用震蛋调教女性下面视频| 日韩欧美不卡在线| 天天色天天干天天| 亚洲a在线视频| 成年AV动漫| 欧美一道本一区二区三区|