国产毛片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”來(lái)區(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ì)于它來(lái)說更像一個(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ū)
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 想要避免發(fā)生災(zāi)難,就用MPLAB SiC電源仿真器!
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進(jìn)行安全電路設(shè)計(jì)
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青青国产免费全部免费观看 | 国产swag在线 | 国产日韩欧美亚洲综合 | 99亚洲视频| 特级片毛片 | 91精品啪在线看国产网站 | 一级做a爰片久久毛片下载 一级做a爰片久久毛片图片 | 91麻豆精品国产自产在线 | 久国产视频 | 国产激情视频在线观看 | 欧美三级免费观看 | 日韩欧美福利视频 | 午夜黄色影片 | 欧美一区二区三区不卡视频 | 国产精欧美一区二区三区 | 四虎免费影视 | 午夜资源在线 | 久久官网 | 黄色网页免费 | 免费av片在线观看网站 | 亚洲高清在线播放 | 亚洲专区在线播放 | 天堂网在线最新版www | 久久久久久久免费视频 | 国产在线成人一区二区 | 99热国产在线观看 | 久久九九影视 | 热re99久久精品国99热 | 国产综合成人亚洲区 | 亚洲欧美v国产一区二区 | 国产精品免费视频能看 | 麻豆影视视频高清在线观看 | 亚洲黄色片在线观看 | 四虎免费在线 | 污视频网站免费在线观看 | 久久综合九色欧美综合狠狠 | 91网站免费在线观看 | 日韩欧美福利视频 | 在线播放黄色片 | 欧美高清视频www夜色资源网 | 精品日本亚洲一区二区三区 |