jakyforever

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 内部类访问私有信息方便

 1、成员内部类访问:先 外部类对象 后内部类对象 可以访问外部类一切信息

 2、静态内部类,只能访问外部类静态信息

public class InnerDemo01 {
    public static void main(String[] args) {
        //先有外部类再有内部类
        //1:外部类
        Outter outter = new Outter();
        //2:内部类
        Outter.Inner inner =outter.new Inner();
        inner.test("jaky");
        
        //外部类只使用一次,可以使用匿名对象
        Outter.Inner  inner2 =new Outter().new Inner();
        
        //静态内部类
        Outter.Inner2 inner3 =new Outter.Inner2();
    }

}

class Outter {

    private static int age;

    // 成员内部类
    class Inner {

        private String name;

        public void test(String name) {
            System.out.println(name);
        }
    }

    // 静态内部类 只能静态信息
    static class Inner2 {

        private String name;

        public void test(String name) {
            System.out.println(age + "-->" + name + "-->" + this.name);
        }
    }
}

3.成员内部类,方法内部类和匿名内部类详解

public class InnerDemo02 {
    public static void main(String[] args) {
        App app= new App();
        app.test();
        app.test2();
        app.test3();
        
    }
}

// 接口: 公共抽象方法+全局常量
abstract interface Door {
    public abstract void open();

    public static final int MAX_VALUE = 1;
}

// 有名称的实现类
class TurnDoor implements Door {

    public void open() {

        System.out.println("旋转门");
    }

}

class App {
    public void test() {
        new TurnDoor().open();
    }

    // 由于TurnDoor类在App类中只用到一次,所以使用方法内部类
    // 方法内部类
    public void test2() {
        class AlarmDoor implements Door {

            @Override
            public void open() {
                System.out.println("报警门");        
                }
        }
        new AlarmDoor().open();
    }

    // 由于AlarmDoor在test2()方法中只用到一次,所以使用匿名内部类
    // 匿名内部类(重点)
    public void test3() {
        Door d =new Door(){
            @Override
            public void open() {
                System.out.println("防盗门");
            }    
            //新增
            public void add(){
                System.out.println("======");
            }
            
        };
        d.open();
        //匿名内部类新增方法不能用,如d.add()报错;
    }
    
}

 

 

 

posted on 2013-09-04 17:44  jakyforever  阅读(164)  评论(0编辑  收藏  举报