内部类

作者: Vincent_Jiang | 来源:发表于2017-06-07 10:44 被阅读4次

    静态内部类

    public class External {
        private static int shared = 100;
    
        public static class StaticInner {
            public void innerMethod() {
                System.out.println("inner -> shared: " + shared);
            }
        }
    
        public void test() {
            StaticInner staticInner = new StaticInner();
            staticInner.innerMethod();
        }
    
        public static void main(String[] args) {
            External external = new External();
            external.test();
        }
    }
    

    成员内部类

    public class External {
        private static int shared = 100;
    
        public class Inner {
            public void innerMethod() {
                System.out.println("inner -> shared: " + shared);
                // 可以通过 "类名.this.方法名" 调用,也可以直接通过方法名调用
                // External.this.action();
                action();
            }
        }
    
        private void action() {
            System.out.println("external -> action()");
        }
    
        public void test() {
            Inner inner = new Inner();
            inner.innerMethod();
        }
    
        public static void main(String[] args) {
            External external = new External();
            external.action();
            external.test();
    
            // 成员内部类是把类当做一个属性,所以成员内部类总是与外部相关联的。
            // 在外部使用时,它不能直接通过 "new External.Inner()" 的方法创建。
            // 必须先实例化一个外部类,通过 "外部类.new" 的方法实例化
            External.Inner inner = external.new Inner();
            inner.innerMethod();
        }
    }
    

    方法内部类

    public class External {
        private int shared = 100;
        private static String S = "S";
    
        public void test(final int param) {
            final String s = "s";
            // 方法内部类定义在外部类的方法中。
            // 方法内部类只可以在定义的方法中被使用。
            class Inner {
                public void innerMethod() {
                    // 方法内部类可以访问外部类的静态、非静态的方法和属性。
                    // 假如该方法是静态方法,则只能访问外部类的静态变量和方法
                    System.out.println("External -> shared: " + shared);
                    System.out.println("External -> S: " + S);
    
                    // 方法内部类还可以访问方法内中的局部变量,但是这些变量必须是 final 修饰的。
                    System.out.println("External -> s: " + s);
                    System.out.println("External -> param: " + param);
                }
            }
    
            Inner inner = new Inner();
            inner.innerMethod();
        }
    
        public static void main(String[] args) {
            External external = new External();
            external.test(200);
        }
    }
    

    相关文章

      网友评论

          本文标题:内部类

          本文链接:https://www.haomeiwen.com/subject/chuofxtx.html