静的内部クラスと非静的内部クラスの異同

10253 ワード

先行知識:
1.内部クラスは外部クラス内に作成されたクラス、すなわちクラスはネスト関係を持つことができる2.内部クラスはstaticによって修飾されているかどうかを区別する普通の内部クラスと静的内部クラスがある
一般内部クラス:
  • オブジェクトの作成時に外部クラスに依存するオブジェクト
  • 外部クラスにアクセス可能なすべてのリソース
  • 静的内部クラス
  • オブジェクトの作成時に外部クラスに依存しないオブジェクト
  • 外部クラスの静的リソース(および静的メソッドの差が少ない)
  • のみにアクセスできます.
    コードの例は次のとおりです.
    package com.yst.learn;
    
    public class Demo {
         
        public static void main(String[] args) {
         
    
            //              
            Outter outter = new Outter();
            System.out.println("        "+outter.numInOutter);
    
            //                
            Outter outter1 = new Outter();
            Outter.Inner inner = outter1.new Inner();
            System.out.println("           "+inner.numInInner);
            System.out.println("           "+inner.getNumInInner());
            System.out.println("                      --->>>" +
                    "       "+inner.getNumInOutter()+"      "+inner.getSTATIC_NUM());
    
            //               
            Outter.StaticInner staticInner = new Outter.StaticInner();
            System.out.println("          "+staticInner.numInInner);
            System.out.println("          "+staticInner.getNumInInner());
            System.out.println("                 "+staticInner.getSTATIC_NUM());
    
        }
    }
    
    
    class Outter{
         
        static int STATIC_NUM = 1;
        int numInOutter = 5;
    
        /**
         *       
         */
        class Inner{
         
            //           numInInner
            int numInInner = 10;
            //           ,                 numInInner
            int getNumInInner(){
         
                return numInInner;
            }
            //                  
            int getNumInOutter(){
         
                return Outter.this.numInOutter;
            }
            int getSTATIC_NUM(){
         
                return STATIC_NUM;
            }
        }
    
        /**
         *      
         */
        static class StaticInner{
         
            //          numInInner
            int numInInner = 20;
            //          ,                 numInInner
            int getNumInInner(){
         
                return numInInner;
            }
            //                 
            int getSTATIC_NUM(){
         
                return STATIC_NUM;
            }
        }
    
    }