王浩祥 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示。
| /** * 扑克类(一副扑克) * @author 骆昊 * */publicclassPoker {    privatestaticString[] suites = {"黑桃", "红桃", "草花", "方块"};    privatestaticint[] faces = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};    privateCard[] cards;    /**     * 构造器     *      */    publicPoker() {        cards = newCard[52];        for(inti = 0; i < suites.length; i++) {            for(intj = 0; j < faces.length; j++) {                cards[i * 13+ j] = newCard(suites[i], faces[j]);            }        }    }    /**     * 洗牌 (随机乱序)     *      */    publicvoidshuffle() {        for(inti = 0, len = cards.length; i < len; i++) {            intindex = (int) (Math.random() * len);            Card temp = cards[index];            cards[index] = cards[i];            cards[i] = temp;        }    }    /**     * 发牌     * @param index 发牌的位置     *      */    publicCard deal(intindex) {        returncards[index];    }    /**     * 卡片类(一张扑克)     * [内部类]     * @author 骆昊     *     */    publicclassCard {        privateString suite;   // 花色        privateintface;       // 点数        publicCard(String suite, intface) {            this.suite = suite;            this.face = face;        }        @Override        publicString toString() {            String faceStr = "";            switch(face) {            case1: faceStr = "A"; break;            case11: faceStr = "J"; break;            case12: faceStr = "Q"; break;            case13: faceStr = "K"; break;            default: faceStr = String.valueOf(face);            }            returnsuite + faceStr;        }    }} | 
测试代码:
|  | classPokerTest {    publicstaticvoidmain(String[] args) {        Poker poker = newPoker();        poker.shuffle();                // 洗牌        Poker.Card c1 = poker.deal(0);  // 发第一张牌        // 对于非静态内部类Card        // 只有通过其外部类Poker对象才能创建Card对象        Poker.Card c2 = poker.newCard("红心", 1);    // 自己创建一张牌        System.out.println(c1);     // 洗牌后的第一张        System.out.println(c2);     // 打印: 红心A    }} | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号