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

Java語(yǔ)言基礎(chǔ):內(nèi)部類

發(fā)布時(shí)間:2011-3-27 00:51    發(fā)布者:1770309616
關(guān)鍵詞: Java語(yǔ)言 , 內(nèi)部類
1.  普通內(nèi)部類
•普通內(nèi)部類的一個(gè)最簡(jiǎn)單的例子:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    // 內(nèi)部類   
    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 {
    // 內(nèi)部類
    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();
    }
}
•外部類可以訪問內(nèi)部類的私有成員,內(nèi)部類也可以訪問外部類的私有成員:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mOut = 10;   
    // 內(nèi)部類   
    public class InnerClass {   
        private int mIn = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(mOut);   
        }   
    }   
    public void printInPrivate(){   
        InnerClass inClass = new InnerClass();   
        // 直接打印內(nèi)部類的私有成員   
        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;
    // 內(nèi)部類
    public class InnerClass {
        private int mIn = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(mOut);
        }
    }
    public void printInPrivate(){
        InnerClass inClass = new InnerClass();
        // 直接打印內(nèi)部類的私有成員
        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();
    }
}
•如果外部類的成員變量與內(nèi)部類的成員變量名字相同,當(dāng)內(nèi)部類要訪問外部類的該成員時(shí),可以使用“OutClass.this.mem”來區(qū)分:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 10;   
    // 內(nèi)部類   
    public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 直接打印外部類的成員   
            System.out.println(OutterClass.this.mMem);   
        }   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 10;
    // 內(nèi)部類
    public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 直接打印外部類的成員
            System.out.println(OutterClass.this.mMem);
        }
    }
}
•要?jiǎng)?chuàng)建普通內(nèi)部類,必須先創(chuàng)建相應(yīng)的外部類:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 10;   
    // 內(nèi)部類   
    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;
    // 內(nèi)部類
    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;   
    // 內(nèi)部類   
    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;
    // 內(nèi)部類
    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.  靜態(tài)內(nèi)部類
普通內(nèi)部類前面加上static修飾符,就成為靜態(tài)內(nèi)部類,靜態(tài)內(nèi)部類類似于C++的嵌套類,與普通內(nèi)部類相比有如下區(qū)別:
•靜態(tài)內(nèi)部類沒有指向外部類的引用,外部類對(duì)于它來說更像一個(gè)名字空間。
•普通內(nèi)部類不能有靜態(tài)成員,靜態(tài)方法,或另一個(gè)靜態(tài)內(nèi)部類;而靜態(tài)內(nèi)部類可以有這一切。
•靜態(tài)內(nèi)部類可以直接創(chuàng)建,不必先創(chuàng)建外部類:
view plaincopy to clipboardprint?
// 外部類   
class OutterClass {   
    private int mMem = 0;   
    // 靜態(tài)內(nèi)部類   
    static public class InnerClass {   
        private int mMem = 0;   
        public void printOutPrivate(){   
            // 這是錯(cuò)誤的   
            // System.out.println(OutterClass.this.mMem);   
        }   
    }   
    public void printInPrivate() {   
        InnerClass inClass = new InnerClass();   
        // 可以直接訪問靜態(tài)內(nèi)部類的成員   
        System.out.println(inClass.mMem);   
    }   
}   
public class Main {      
    public static void main(String[] args) {   
        // 直接創(chuàng)建靜態(tài)內(nèi)部類   
        OutterClass.InnerClass inClass = new OutterClass.InnerClass();   
        inClass.printOutPrivate();   
    }   
}  
// 外部類
class OutterClass {
    private int mMem = 0;
    // 靜態(tài)內(nèi)部類
    static public class InnerClass {
        private int mMem = 0;
        public void printOutPrivate(){
            // 這是錯(cuò)誤的
            // System.out.println(OutterClass.this.mMem);
        }
    }
    public void printInPrivate() {
        InnerClass inClass = new InnerClass();
        // 可以直接訪問靜態(tài)內(nèi)部類的成員
        System.out.println(inClass.mMem);
    }
}
public class Main {   
    public static void main(String[] args) {
        // 直接創(chuàng)建靜態(tài)內(nèi)部類
        OutterClass.InnerClass inClass = new OutterClass.InnerClass();
        inClass.printOutPrivate();
    }
}
從上面描述可以看出,靜態(tài)內(nèi)部類與一般類沒有太大區(qū)別,只不過它是放在一個(gè)類的里面,這個(gè)類相當(dāng)于它的名字空間,可以防止命名沖突。
3.  局部?jī)?nèi)部類
Java可以把一個(gè)類定義在一個(gè)方法里面,甚至是一個(gè){}塊里面,它的作用域就在這個(gè)塊里面:

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

view plaincopy to clipboardprint?
// 接口   
interface Talker {   
    public void Talk();   
}   
   
// 外部類   
class OutterClass {   
    public Talker getTalker() {   
        // 現(xiàn)實(shí)該接口的局部?jī)?nèi)部類   
        class SomeTalker implements Talker {   
            public void Talk() {   
                System.out.println("hello");   
            }   
        }   
        // 創(chuàng)建類實(shí)例并作為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() {
        // 現(xiàn)實(shí)該接口的局部?jī)?nèi)部類
        class SomeTalker implements Talker {
            public void Talk() {
                System.out.println("hello");
            }
        }
        // 創(chuàng)建類實(shí)例并作為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.  匿名內(nèi)部類
匿名內(nèi)部類的語(yǔ)法如下:

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

它被認(rèn)為是InterfaceName的實(shí)現(xiàn)者,或是SuperclassName的繼承類,匿名內(nèi)部類沒有構(gòu)建函數(shù),如果SuperclassName有帶參數(shù)的構(gòu)造函數(shù),必須在創(chuàng)建匿名內(nèi)部類時(shí)帶上這些參數(shù),下面是匿名內(nèi)部類最常見的使用場(chǎng)合:

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();   
        // 直接生成一個(gè)匿名內(nèi)部類   
        outClass.Talk(new Talker(){   
            public void Talk() {   
                System.out.println("hello");   
            }   
        });   
    }   
}
本文地址:http://m.qingdxww.cn/thread-60025-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国语在线视频手机在线| 饥渴的护士自慰被发现| 国产精品无码久久av| 美国一级大黄一片免费的网站| 日韩男明星| 长篇高h肉爽文丝袜| 日本一本草久p| 一级美女黄色片| 欧美综合激情| 天天综合网天天综合色| 日韩 欧美 综合| 亚色最新网址| 下面好紧奶好大17p| 中文高清在线观看免费观看| 国产成人h在线视频| 欧美一级久久久久久久大| 亚洲国产日韩欧美高清片a| 日韩a级一片在线观看| 日操夜操| 婷婷激情网| 99久久99久久久精品齐齐鬼色| 精品日韩二区三区精品视频| 亚洲高清视频在线| 亚洲一区二区三区视频| 日本视频不卡| 亚洲视频在线免费播放| 亚洲理论片在线中文字幕| YELLOW视频在线观看大全| 欧美高清vivoesosexo10| 中文字幕绝色少妇性| 欧洲毛片真人| 亚洲欧美日韩中字综合| 野外xxxxfreexxxx印度| 丁香成人网址| 色宅男看片午夜大片免费看| 午夜精品久久久久久久99 | 日本三级黄色网址| 奇米狠狠| 天天射美女| 99热精品在线视频观看| 四虎免费影院|