面对对象-内部类

成员内部类:

public class OuterClass {
    //外部类的成员
    private String name="zhangsan";
    private int num=10;
    //外部类的方法
    public void outerMethod(){
//        System.out.println(a);//外部类不能访问内部类的成员
    }
    //内部类
    public class InnerClass{
        //内部类的成员
        private int num=20;
        private int a=30;
        //内部类的方法
        public void innerMethod(){
            System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
            System.out.println("OuterClass--->num="+OuterClass.this.num);//外部类的成员
            System.out.println("InnerClass--->num="+this.num);//内部类的成员
        }
    }
    
    public static void main(String[] args) {
        /*
         * 创建内部类的实例:
         * 外部类.内部类 对象名 = new 外部类().new 内部类();
         */
        OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.innerMethod();
        
    }

 

静态内部类:使用static修饰的内部类。静态内部只能访问外部的静态成员。

public class OuterClass2 {
    //外部类的成员
    private static String name="zhangsan";
    private static int num=10;
    //外部类的方法
    public void outerMethod(){
//        System.out.println(a);//外部类不能访问内部类的成员
    }
    //内部类
    public static class InnerClass{
        //内部类的成员
        private int num=20;
        private int a=30;
        //内部类的方法
        public void innerMethod(){
            System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
            System.out.println("OuterClass--->num="+OuterClass2.num);//外部类的成员
            System.out.println("InnerClass--->num="+this.num);//内部类的成员
        }
    }
    
    public static void main(String[] args) {
        /*
         * 创建静态内部类的实例:
         * 外部类.内部类 对象名 = new 外部类.内部类();
         */
        OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
        innerClass.innerMethod();
        
    }
    
}

 

方法内部类:在方法中定义的内部类。如果方法内部类中需要访问方法中局部变量,该局部变量必须使用final修饰

public class OuterClass3 {
    // 外部类的成员
    private String name = "zhangsan";
    private int num = 10;

    // 外部类的方法
    public void outerMethod(){
            //方法内部类
        class InnerClass{
            //内部类的成员
            private final int num=20;
            private int a=30;
            //内部类的方法
            public void innerMethod(){
                System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
                System.out.println("OuterClass--->num="+OuterClass3.this.num);//外部类的成员
                System.out.println("InnerClass--->num="+num);//内部类的成员
            }
        }
        InnerClass innerClass = new InnerClass();
        innerClass.innerMethod();
    }

    public static void main(String[] args) {
        OuterClass3 outerClass = new OuterClass3();
        outerClass.outerMethod();
     }

}

 

匿名内部类Anonymous
可以实现一个接口,或者继承一个父类
只能实现一个接口
适合创建那种只需要一次使用的类,不能重复使用。比较常见的是在图形界面编程GUI里用得到。
匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量

public class TestAnonymous {
    public static void main(String[] args) {
        //实现一个接口的匿名内部类
        /*
         *  class MyClass implements MyInterface{
         *      public void test(){
         *          ..
         *      }
         *  }
         *  MyClass myClass = new MyClass();
         *  myClass.test();
         */
        new MyInterface() {
            public void test() {
                System.out.println("测试匿名内部的test方法....");
            }
        }.test();
        /*
         * 继承的匿名类。
         * class MyThread extends Thread{
         *      public void run(){
         *      .... 
         *   }
         * }
         * MyThread myThread = new MyThread();
         * myThread.start();
         */
        new Thread(){
            public void run() {
                System.out.println("Thread....run方法...");
            }
        }.start();
    }
}

 

posted @ 2017-06-12 19:16  大技霸  阅读(141)  评论(0编辑  收藏  举报