内部类有成员内部类,局部内部类,匿名内部类,静态内部类。

1,成员内部类package innerClass;

public class InnerClassTest {
    String s1="我是外部成员变量。。";
    public static String s2="我是外部静态变量..";
    class Inner{
        void innerTest(){
            String s1="我是内部成员变量";
            String s2="我是内部成员变量";
            System.out.println(s1 +"\n"+ s2);
            System.out.println(InnerClassTest.this.s1);
        }
    }public static void main(String[] args) {
        InnerClassTest out = new InnerClassTest();
        Inner inner =  out.new Inner();
        inner.innerTest();
    }
}


输出:

  我是内部成员变量


  我是内部成员变量


  我是外部成员变量。。

 

 

a,内部类的变量和方法会隐藏外部类的成员变量和方法,可以通过外部类的对象调用外部类变量和方法。

b,内部类实例化通过外部类的对象来实现。

2,局部内部类,定义在方法内部或一个作用域里面的类

package innerClass;

public class PartInnerClass {
    public String getSomething(){
        class Inner{
            String s = "我是内部类的成员变量";
        }
        return new Inner().s;
    }
    public static void main(String[] args) {
        System.out.println(new partInnerClass().getSomething());
    }
}

输出:

   我是内部类的成员变量

 

3,匿名内部类,只要是一个抽象类或者接口,那么他的方法都可以在子类中实现,最常用的是多线程的实现,如:

package innerClass;

public class AnonymousInnerClass {
    public static void main(String[] args) {
        Runnable r = new Runnable(){
            public void run(){
                System.out.println("I'm anonymous class.");
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}

4,静态内部类,和成员内部类有两个区别:a,实例化不依赖外部类,b,不能直接访问外部类的非静态变量和方法

package innerClass;

public class StaticInnerClass {
    int i=1;
    static int j=2;
    static class InnerClass{
        void test(){
            //静态内部类不能访问外部类的非静态方法和变量
            System.out.println(new StaticInnerClass().i);
            System.out.println(j);
        }
    }
    public static void main(String[] args) {
        //不需要依赖外部类
        InnerClass inner = new InnerClass();
        inner.test();
    }
}

 

posted on 2016-03-10 17:21  Frand.D  阅读(214)  评论(0编辑  收藏  举报